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" />

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 ..


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.


59

Kotlin

stateListAnimator = null

Jawa

setStateListAnimator(null);

XML

android:stateListAnimator="@null"

2
Mudah dan bersih.
JCasso

23

coba: android:stateListAnimator="@null"


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


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>

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);
    }

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>


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
            }
        });

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.