วิธีลบเงาของปุ่ม (android)


168

ฉันต้องการลบเงาออกจากปุ่มเพื่อให้ดูเรียบขึ้น

ฉันมีสิ่งนี้ในขณะนี้:

ปุ่มยกเลิกด้วยเงา

แต่ฉันต้องการสิ่งนี้:

ปุ่มยกเลิกโดยไม่มีเงา


ฉันเขียนความคิดเห็นที่นี่มันใช้ได้สำหรับฉัน [ stackoverflow.com/questions/27867284/… [1]: stackoverflow.com/questions/27867284/…
msamardzic

คำตอบ:


404

อีกทางเลือกหนึ่งคือการเพิ่ม

style="?android:attr/borderlessButtonStyle"

ไปที่ปุ่ม xml ของคุณตามที่บันทึกไว้ที่นี่ http://developer.android.com/guide/topics/ui/controls/button.html

ตัวอย่างจะเป็น

<Button
android:id="@+id/button_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage"
style="?android:attr/borderlessButtonStyle" />

วิธีนี้จะลบรูปแบบของปุ่มออกมาคือเงาและนูน การเพิ่มตัวเลือกด้วยรูปร่างเป็นตัวเลือก นี่คือคำตอบที่แม่นยำยิ่งขึ้น
Juan José Melero Gómez

35
นอกจากนี้ฉันใช้สไตล์ที่กำหนดเองสำหรับปุ่มของฉัน คุณสามารถขยายสไตล์ที่คุณกำหนดเองได้จาก: <style name = "MyCustomButtonStyle" parent = "Widget.AppCompat.Button.Borderless">
Tobliug

125

วิธีที่ง่ายกว่าในการเพิ่มแท็กนี้ลงในปุ่มของคุณ:

android:stateListAnimator="@null"

แม้ว่าจะต้องใช้ API ระดับ 21 ขึ้นไป ..


2
ทำงานให้ฉันอย่างมาก
KoreanXcodeWorker

1
ฉันชอบวิธีนี้ดีกว่ามีความยืดหยุ่นมากกว่า
Ayejuni Ilemobayo Kings

@Alon Kogan มีความเข้ากันได้แบบย้อนหลังสำหรับการใช้android:stateListAnimator แอตทริบิวต์หรือไม่
blueware

โซลูชันนี้ช่วยให้คุณสร้างสไตล์บ็อตที่ต้องสืบทอดจากborderlessButtonStyleสไตล์ซึ่งให้ความยืดหยุ่นมากขึ้น
Juan José Melero Gómez

นี่เป็นทางออกเดียวที่ใช้ได้กับฉันแท็กไร้ขอบแบบไม่ทำงานเนื่องจากฉันต้องกำจัดเงาในขณะที่กดปุ่ม
ACAkgul

61

ฉันใช้สไตล์ที่กำหนดเอง

<style name="MyButtonStyle" parent="@style/Widget.AppCompat.Button.Borderless"></style>

อย่าลืมเพิ่ม

<item name="android:textAllCaps">false</item>

มิฉะนั้นข้อความของปุ่มจะอยู่ใน UpperCase



23

ลอง : android:stateListAnimator="@null"


9
แม้ว่าสิ่งนี้อาจแก้ปัญหา OP ได้ แต่ฉันขอแนะนำให้เพิ่มบริบทลงไป ทำไมถึงช่วยได้? นอกจากนี้“ ลองนี่” เป็นการเข้าใจผิดเล็กน้อย คุณแน่ใจหรือว่ามันจะแก้ปัญหาหรือเพียงแค่คาดเดา? ถ้าเป็นเช่นนั้นคุณควรเขียนความคิดเห็นแทน
GergelyPolonkai

มันต้องใช้ API 21
CoolMind


6

การใช้สิ่งนี้เป็นพื้นหลังสำหรับปุ่มของคุณอาจช่วยเปลี่ยนสีตามความต้องการของคุณ

<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" >
        <shape android:shape="rectangle">
            <solid android:color="@color/app_theme_light" />
            <padding
                android:left="8dp"
                android:top="4dp"
                android:right="8dp"
                android:bottom="4dp" />
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/app_theme_dark" />
            <padding
                android:left="8dp"
                android:top="4dp"
                android:right="8dp"
                android:bottom="4dp" />
        </shape>
    </item>
</selector>

4
คุณอธิบายได้ไหมว่ามันทำงานอย่างไร มันไม่ได้ลบเงาตกสำหรับฉัน
CACuzcatlan

มันจะแทนที่พื้นหลังดั้งเดิมด้วยเงาด้วยพื้นหลังนี้ที่มีสีทึบ
dlohani

3

คำตอบ @ Alt-Cat ใช้งานได้สำหรับฉัน!

R.attr.borderlessButtonStyle ไม่มีเงา

และเอกสารของปุ่มดีมาก

นอกจากนี้คุณสามารถตั้งค่าสไตล์นี้บนปุ่มที่คุณกำหนดเองในตัวสร้างที่สอง

    public CustomButton(Context context, AttributeSet attrs) {
        this(context, attrs, R.attr.borderlessButtonStyle);
    }

3

คำตอบทั้งหมดข้างต้นนั้นยอดเยี่ยม แต่ฉันจะแนะนำตัวเลือกอื่น:

<style name="FlatButtonStyle" parent="Base.Widget.AppCompat.Button">
 <item name="android:stateListAnimator">@null</item>
 <!-- more style custom here --> 
</style>


มันคล้ายกับ Alon Kogan ( stackoverflow.com/a/39122825/2914140 )
CoolMind

สิ่งนี้แตกต่างจาก 5ish จากด้านบนอย่างไร
zeroDivider

2

แทนที่จะเป็นปุ่มคุณสามารถใช้ TextView และเพิ่ม listener การคลิกในโค้ด java

กล่าวคือ

ในโครงร่างกิจกรรม xml:

<TextView
    android:id="@+id/btn_text_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimaryDark"
    android:text="@string/btn_text"
    android:gravity="center"
    android:textColor="@color/colorAccent"
    android:fontFamily="sans-serif-medium"
    android:textAllCaps="true" />

ในไฟล์กิจกรรม java:

TextView btnTextView = (TextView) findViewById(R.id.btn_text_view);
btnTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // handler code
            }
        });

นี่ไม่ใช่คำตอบที่ถูกต้อง แต่จริงๆแล้วคุณช่วยฉันแก้ปัญหาด้วยปัญหาที่คล้ายกันดังนั้นขอบคุณ!
กล่อง

AHA! ความคิดที่ดี - ให้ฉันได้รับการแก้ไขอย่างรวดเร็ว -
Rohit Kumar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.