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

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


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.


59

Kotlin

stateListAnimator = null

Java

setStateListAnimator(null);

XML

android:stateListAnimator="@null"

2
Einfach und sauber.
JCasso

23

Versuchen : android:stateListAnimator="@null"


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"


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>

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

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>


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.