Bagaimana menghapus bayangan tombol (android)

Jawaban:

403

Alternatif lain adalah menambahkan

style="?android:attr/borderlessButtonStyle"

ke Tombol Anda xml seperti yang didokumentasikan di sini http://developer.android.com/guide/topics/ui/controls/button.html

Contohnya adalah

<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" />
Alt-Cat
sumber
Ini menghilangkan gaya tombol, misalnya bayangan dan emboss. Menambahkan pemilih dengan bentuk adalah opsional. Ini jawaban yang lebih akurat.
Juan José Melero Gómez
35
Selain itu, saya menggunakan gaya khusus untuk tombol saya. Anda dapat memperluas gaya khusus Anda dari: <style name = "MyCustomButtonStyle" parent = "Widget.AppCompat.Button.Borderless">
Tobliug
125

Cara yang lebih sederhana untuk dilakukan adalah menambahkan tag ini ke tombol Anda:

android:stateListAnimator="@null"

meskipun membutuhkan API level 21 atau lebih ..

Alon Kogan
sumber
2
Bekerja sangat baik untuk saya
KoreanXcodeWorker
1
Saya suka metode ini lebih baik, lebih fleksibel.
Ayejuni Ilemobayo Kings
@Alon Kogan, apakah ada kompatibilitas mundur untuk menggunakan android:stateListAnimator atribut?
blueware
Solusi ini memungkinkan Anda untuk membuat bot gaya yang harus diwarisi dari borderlessButtonStylegaya, yang memberi Anda lebih banyak fleksibilitas.
Juan José Melero Gómez
ini hanya solusi yang bekerja untuk saya, tag borderlessButtonStyle tidak berfungsi, karena saya harus menyingkirkan bayangan saat tombol ditekan
ACAkgul
61

Saya menggunakan gaya khusus

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

Jangan lupa menambahkan

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

jika tidak, teks tombol akan berada dalam huruf besar.

郑松岚
sumber
59

Kotlin

stateListAnimator = null

Jawa

setStateListAnimator(null);

XML

android:stateListAnimator="@null"
Michael
sumber
2
Mudah dan bersih.
JCasso
23

coba: android:stateListAnimator="@null"

Seth
sumber
9
Meskipun ini dapat menyelesaikan masalah OP, saya sarankan untuk menambahkan beberapa konteks padanya. Mengapa ini membantu? Juga, "coba ini" agak menyesatkan. Apakah Anda yakin itu akan menyelesaikan masalah, atau hanya menebak? Jika demikian, Anda sebaiknya menulis komentar.
GergelyPolonkai
Ini membutuhkan API 21.
CoolMind
14

Tombol desing material ditambahkan ke tombol xml: style="@style/Widget.MaterialComponents.Button.UnelevatedButton"

Efi G
sumber
Kadang-kadang mirip dengan stackoverflow.com/a/38004981/2914140 , tetapi tombol abu-abu dalam keadaan dinonaktifkan menjadi lebih ringan.
CoolMind
6

Menggunakan ini sebagai latar belakang untuk tombol Anda dapat membantu, mengubah warna sesuai kebutuhan Anda

<?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>
dlohani
sumber
4
Bisakah Anda menjelaskan cara kerjanya? Itu tidak menghapus bayangan drop bagi saya.
CACuzcatlan
ini menggantikan latar belakang asli dengan bayangan, dengan latar belakang ini dengan warna solid
dlohani
3

jawaban @ Alt-Cat bekerja untuk saya!

R.attr.borderlessButtonStyle tidak mengandung bayangan.

dan dokumen tombolnya bagus.

Anda juga dapat mengatur gaya ini pada tombol kustom Anda, di konstruktor kedua.

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

Semua jawaban di atas bagus, tetapi saya akan menyarankan opsi lain:

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

Duc Thang
sumber
Ini mirip dengan Alon Kogan ( stackoverflow.com/a/39122825/2914140 ).
CoolMind
bagaimana ini berbeda dari 5ish di atas?
zeroDivider
2

Alih-alih Tombol, Anda dapat menggunakan TextView dan menambahkan pendengar klik dalam kode java.

Yaitu

dalam tata letak aktivitas 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" />

dalam file java aktivitas:

TextView btnTextView = (TextView) findViewById(R.id.btn_text_view);
btnTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // handler code
            }
        });
kode caitcoo0odes
sumber
Ini bukan jawaban yang benar, tetapi Anda benar-benar membantu saya untuk memperbaiki masalah saya dengan masalah yang sama, jadi terima kasih!
kotak
aha! ide bagus - buat saya perbaikan cepat -
Rohit Kumar