Come rimuovere button shadow (android)


Risposte:


404

Un'altra alternativa è quella di aggiungere

style="?android:attr/borderlessButtonStyle"

al tuo Button xml come documentato qui http://developer.android.com/guide/topics/ui/controls/button.html

Un esempio sarebbe

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

Questo rimuove lo stile del pulsante, l'ombra e la rilievo. L'aggiunta di un selettore con forme è facoltativa. Questa è una risposta più accurata.
Juan José Melero Gómez,

35
Inoltre, utilizzo uno stile personalizzato per il mio pulsante. puoi estendere il tuo stile personalizzato da: <style name = "MyCustomButtonStyle" parent = "Widget.AppCompat.Button.Borderless">
Tobliug

125

Un modo più semplice per farlo è aggiungere questo tag al tuo pulsante:

android:stateListAnimator="@null"

anche se richiede livello API 21 o superiore.


2
Ha funzionato molto per me
KoreanXcodeWorker

1
amo questo metodo meglio, è più flessibile.
Ayejuni Ilemobayo Kings,

@Alon Kogan, esiste qualche compatibilità con le versioni precedenti per l'utilizzo android:stateListAnimator dell'attributo?
progetto

Questa soluzione ti consente di creare un bot di stile che deve ereditare dallo borderlessButtonStylestile, il che ti dà maggiore flessibilità.
Juan José Melero Gómez,

questa è l'unica soluzione che ha funzionato per me, il tag borderlessButtonStyle non ha funzionato, dal momento che ho bisogno di liberarmi dall'ombra mentre viene premuto il pulsante
ACAkgul

61

Uso uno stile personalizzato

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

Non dimenticare di aggiungere

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

altrimenti il ​​testo del pulsante sarà in UpperCase.


59

Kotlin

stateListAnimator = null

Giava

setStateListAnimator(null);

XML

android:stateListAnimator="@null"

2
Facile e pulito.
JCasso,

23

provare : android:stateListAnimator="@null"


9
Sebbene ciò possa risolvere il problema del PO, raccomanderei di aggiungere un contesto ad esso. Perché sarà d'aiuto? Inoltre, "provare questo" è un po 'fuorviante. Sei sicuro che risolverà il problema o stai solo indovinando? In tal caso, dovresti invece scrivere un commento.
GergelyPolonkai,

Richiede API 21.
CoolMind

14

I pulsanti di progettazione del materiale si aggiungono al pulsante xml: style="@style/Widget.MaterialComponents.Button.UnelevatedButton"


A volte è simile a stackoverflow.com/a/38004981/2914140 , ma un pulsante grigio in stato disabilitato diventa più chiaro.
CoolMind

6

Usarlo come sfondo per il tuo pulsante potrebbe aiutare, cambiare il colore in base alle tue esigenze

<?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
Puoi spiegare come funziona? Non ha rimosso l'ombra discendente per me.
CACuzcatlan,

sostituisce lo sfondo originale con le ombre, con questo sfondo a tinta unita
dlohani,

3

la risposta di @ Alt-Cat funziona per me!

R.attr.borderlessButtonStyle non contiene ombre.

e il documento del pulsante è fantastico.

Inoltre, puoi impostare questo stile sul tuo pulsante personalizzato, nel secondo costruttore.

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


2

Invece di un pulsante, è possibile utilizzare un TextView e aggiungere un listener di clic nel codice java.

ie

nel layout attività 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" />

nel file java di attività:

TextView btnTextView = (TextView) findViewById(R.id.btn_text_view);
btnTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // handler code
            }
        });

Questa non è la risposta corretta, ma in realtà mi hai aiutato a risolvere il mio problema con un problema simile, quindi grazie!
scatola

aha! bella idea - mi ha dato una soluzione rapida -
Rohit Kumar il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.