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.