So entfernen Sie Button Shadow (Android)

Antworten:

402

Eine andere Alternative ist das Hinzufügen

style="?android:attr/borderlessButtonStyle"

zu Ihrer Button-XML, wie hier dokumentiert http://developer.android.com/guide/topics/ui/controls/button.html

Ein Beispiel wäre

<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
quelle
Dadurch wird der Schaltflächenstil entfernt, z. B. der Schatten und die Prägung. Das Hinzufügen eines Selektors mit Formen ist optional. Dies ist eine genauere Antwort.
Juan José Melero Gómez
35
Außerdem verwende ich einen benutzerdefinierten Stil für meine Schaltfläche. Sie können Ihren benutzerdefinierten Stil erweitern von: <style name = "MyCustomButtonStyle" parent = "Widget.AppCompat.Button.Borderless">
Tobliug
124

Eine einfachere Möglichkeit besteht darin, dieses Tag zu Ihrer Schaltfläche hinzuzufügen:

android:stateListAnimator="@null"

obwohl es API Level 21 oder mehr erfordert ..

Alon Kogan
quelle
2
Arbeitete sehr für mich
KoreanXcodeWorker
1
Ich liebe diese Methode besser, sie ist flexibler.
Ayejuni Ilemobayo Kings
@Alon Kogan, gibt es eine Abwärtskompatibilität für die Verwendung des android:stateListAnimator Attributs?
Blueware
Mit dieser Lösung können Sie einen Stilbot erstellen, der vom borderlessButtonStyleStil erben muss , wodurch Sie mehr Flexibilität erhalten.
Juan José Melero Gómez
Dies ist nur eine Lösung, die für mich funktioniert. Das borderlessButtonStyle-Tag hat nicht funktioniert, da ich den Schatten
entfernen muss,
61

Ich benutze einen benutzerdefinierten Stil

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

Vergiss nicht hinzuzufügen

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

Andernfalls befindet sich der Schaltflächentext in Großbuchstaben.

郑松岚
quelle
59

Kotlin

stateListAnimator = null

Java

setStateListAnimator(null);

XML

android:stateListAnimator="@null"
Michael
quelle
2
Einfach und sauber.
JCasso
23

Versuchen : android:stateListAnimator="@null"

Seth
quelle
9
Obwohl dies das Problem des OP lösen kann, würde ich empfehlen, einen Kontext hinzuzufügen. Warum wird es helfen? Auch "versuchen Sie dies" ist ein bisschen irreführend. Sind Sie sicher, dass es das Problem lösen wird, oder raten Sie einfach? Wenn ja, sollten Sie stattdessen einen Kommentar schreiben.
GergelyPolonkai
Es erfordert API 21.
CoolMind
14

Schaltflächen zum Entwerfen von Material zur Schaltfläche xml hinzufügen: style="@style/Widget.MaterialComponents.Button.UnelevatedButton"

Efi G.
quelle
Manchmal ähnelt es stackoverflow.com/a/38004981/2914140 , aber eine graue Schaltfläche im deaktivierten Zustand wird heller.
CoolMind
6

Wenn Sie dies als Hintergrund für Ihre Schaltfläche verwenden, können Sie die Farbe an Ihre Bedürfnisse anpassen

<?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
quelle
4
Können Sie erklären, wie das funktioniert? Es hat den Schlagschatten für mich nicht entfernt.
CACuzcatlan
es ersetzt ursprünglichen Hintergrund durch Schatten, mit diesem Hintergrund mit Volltonfarbe
dlohani
3

Die @ Alt-Cat Antwort funktioniert für mich!

R.attr.borderlessButtonStyle enthält keinen Schatten.

und das Dokument der Schaltfläche ist großartig.

Sie können diesen Stil auch auf Ihrer benutzerdefinierten Schaltfläche im zweiten Konstruktor festlegen.

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

Alle obigen Antworten sind großartig, aber ich werde eine andere Option vorschlagen:

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

Duc Thang
quelle
Es ähnelt Alon Kogan ( stackoverflow.com/a/39122825/2914140 ).
CoolMind
Wie unterscheidet sich das von 5ish von oben?
zeroDivider
2

Anstelle einer Schaltfläche können Sie eine Textansicht verwenden und dem Java-Code einen Klick-Listener hinzufügen.

Dh

im Aktivitätslayout 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" />

in der Aktivitäts-Java-Datei:

TextView btnTextView = (TextView) findViewById(R.id.btn_text_view);
btnTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // handler code
            }
        });
caitcoo0odes
quelle
Dies ist nicht die richtige Antwort, aber Sie haben mir tatsächlich geholfen, mein Problem mit einem ähnlichen Problem zu beheben. Vielen Dank!
Box
Aha! nette Idee - bekam mir eine schnelle Lösung -
Rohit Kumar