Jak usunąć cień przycisku (Android)

Odpowiedzi:

404

Inną alternatywą jest dodanie

style="?android:attr/borderlessButtonStyle"

do pliku XML przycisku, zgodnie z dokumentacją tutaj http://developer.android.com/guide/topics/ui/controls/button.html

Przykładem może być

<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
źródło
Spowoduje to usunięcie stylu przycisku, np. Cienia i wytłoczenia. Dodanie selektora z kształtami jest opcjonalne. To jest dokładniejsza odpowiedź.
Juan José Melero Gómez
35
Ponadto używam niestandardowego stylu dla mojego przycisku. możesz rozszerzyć swój własny styl z: <style name = "MyCustomButtonStyle" parent = "Widget.AppCompat.Button.Borderless">
Tobliug
125

Prostszym sposobem jest dodanie tego tagu do przycisku:

android:stateListAnimator="@null"

chociaż wymaga poziomu API 21 lub wyższego.

Alon Kogan
źródło
2
Bardzo mi
pomogło
1
Uwielbiam tę metodę bardziej, jest bardziej elastyczna.
Ayejuni Ilemobayo Kings
@Alon Kogan, czy jest jakaś wsteczna kompatybilność przy używaniu android:stateListAnimator atrybutu?
blueware
To rozwiązanie pozwala na stworzenie bota stylu, który musi dziedziczyć po borderlessButtonStylestylu, co daje większą elastyczność.
Juan José Melero Gómez
to jedyne rozwiązanie, które działało u mnie, tag
borderlessButtonStyle
61

Używam niestandardowego stylu

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

Nie zapomnij dodać

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

w przeciwnym razie tekst przycisku będzie pisany wielkimi literami.

郑松岚
źródło
59

Kotlin

stateListAnimator = null

Jawa

setStateListAnimator(null);

XML

android:stateListAnimator="@null"
Michael
źródło
2
Łatwe i czyste.
JCasso
23

próbować : android:stateListAnimator="@null"

Seth
źródło
9
Chociaż może to rozwiązać problem PO, polecam dodać do tego kontekst. Dlaczego to pomoże? Ponadto „spróbuj tego” jest nieco mylące. Czy na pewno rozwiąże to problem, czy po prostu zgadujesz? Jeśli tak, napisz komentarz.
GergelyPolonkai
Wymaga API 21.
CoolMind
14

Przyciski do projektowania materiałów dodają do przycisku xml: style="@style/Widget.MaterialComponents.Button.UnelevatedButton"

Efi G
źródło
Czasami jest podobny do stackoverflow.com/a/38004981/2914140 , ale szary przycisk w stanie wyłączonym staje się jaśniejszy.
CoolMind
6

Używanie tego jako tła dla przycisku może pomóc, zmień kolor zgodnie ze swoimi potrzebami

<?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
źródło
4
Czy możesz wyjaśnić, jak to działa? Nie usunęło dla mnie cienia.
CACuzcatlan
zastępuje oryginalne tło cieniami, z tym tłem w jednolitym kolorze
dlohani
3

odpowiedź @ Alt-Cat działa dla mnie!

R.attr.borderlessButtonStyle nie zawiera cienia.

a dokument przycisku jest świetny.

Możesz także ustawić ten styl na swoim przycisku niestandardowym w drugim konstruktorze.

    public CustomButton(Context context, AttributeSet attrs) {
        this(context, attrs, R.attr.borderlessButtonStyle);
    }
Xiang Li
źródło
3

Wszystkie powyższe odpowiedzi są świetne, ale zasugeruję inną opcję:

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

Duc Thang
źródło
Jest podobny do Alona Kogana ( stackoverflow.com/a/39122825/2914140 ).
CoolMind
czym różni się to od 5ish powyżej?
zeroDivider
2

Zamiast przycisku możesz użyć TextView i dodać odbiornik kliknięć w kodzie java.

To znaczy

w układzie zajęć 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" />

w pliku aktywności java:

TextView btnTextView = (TextView) findViewById(R.id.btn_text_view);
btnTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // handler code
            }
        });
caitcoo0odes
źródło
To nie jest poprawna odpowiedź, ale tak naprawdę pomogłeś mi rozwiązać mój problem podobnym problemem, więc dziękuję!
pudełko
Aha! fajny pomysł - dał mi szybką poprawkę -
Rohit Kumar