Cómo eliminar la sombra del botón (android)

Respuestas:

404

Otra alternativa es agregar

style="?android:attr/borderlessButtonStyle"

a su botón xml como se documenta aquí http://developer.android.com/guide/topics/ui/controls/button.html

Un ejemplo sería

<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
fuente
Esto elimina el estilo del botón, la sombra y el relieve. Agregar un selector con formas es opcional. Esta es una respuesta más precisa.
Juan José Melero Gómez
35
Además, uso un estilo personalizado para mi botón. puede ampliar su estilo personalizado desde: <style name = "MyCustomButtonStyle" parent = "Widget.AppCompat.Button.Borderless">
Tobliug
125

Una forma más sencilla de hacerlo es agregar esta etiqueta a su botón:

android:stateListAnimator="@null"

aunque requiere API nivel 21 o más ..

Alon Kogan
fuente
2
Me funcionó mucho
KoreanXcodeWorker
1
Me encanta este método mejor, es más flexible.
Ayejuni Ilemobayo Kings el
@Alon Kogan, ¿hay alguna compatibilidad con versiones anteriores para usar el android:stateListAnimator atributo?
blueware
Esta solución le permite crear un bot de estilo que tiene que heredar del borderlessButtonStyleestilo, lo que le brinda más flexibilidad.
Juan José Melero Gómez
esta es la única solución que funcionó para mí, la etiqueta BorderlessButtonStyle no funcionó, ya que necesito deshacerme de la sombra mientras se presiona el botón
ACAkgul
61

Yo uso un estilo personalizado

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

No olvides agregar

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

de lo contrario, el texto del botón estará en UpperCase.

郑松岚
fuente
59

Kotlin

stateListAnimator = null

Java

setStateListAnimator(null);

XML

android:stateListAnimator="@null"
Miguel
fuente
2
Fácil y limpio
JCasso
23

tratar : android:stateListAnimator="@null"

Seth
fuente
9
Aunque esto puede resolver el problema del OP, recomendaría agregarle algún contexto. ¿Por qué va a ayudar? Además, "probar esto" es un poco engañoso. ¿Estás seguro de que resolverá el problema, o simplemente adivinando? Si es así, deberías escribir un comentario en su lugar.
GergelyPolonkai
Requiere API 21.
CoolMind
14

Los botones de diseño de material se agregan al botón xml: style="@style/Widget.MaterialComponents.Button.UnelevatedButton"

Efi G
fuente
A veces es similar a stackoverflow.com/a/38004981/2914140 , pero un botón gris en estado desactivado se vuelve más claro.
CoolMind
6

Usar esto como fondo para su botón podría ayudar, cambiar el color a sus necesidades

<?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
fuente
44
¿Puedes explicar cómo funciona esto? No eliminó la sombra paralela para mí.
CACuzcatlan
reemplaza el fondo original con sombras, con este fondo con color sólido
dlohani
3

¡La respuesta @ Alt-Cat funciona para mí!

R.attr.borderlessButtonStyle no contiene sombra.

y el documento del botón es genial.

Además, puede establecer este estilo en su botón personalizado, en el segundo constructor.

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

Todas las respuestas anteriores son geniales, pero sugeriré otra opción:

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

Duc Thang
fuente
Es similar a Alon Kogan ( stackoverflow.com/a/39122825/2914140 ).
CoolMind
¿Cómo es esto diferente de 5ish de arriba?
zeroDivider
2

En lugar de un botón, puede usar TextView y agregar un detector de clics en el código de Java.

Es decir

en el diseño de la actividad 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" />

en el archivo java de actividad:

TextView btnTextView = (TextView) findViewById(R.id.btn_text_view);
btnTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // handler code
            }
        });
caitcoo0odes
fuente
Esta no es la respuesta correcta, pero en realidad me ayudaste a solucionar mi problema con un problema similar, ¡así que gracias!
caja el
aha! buena idea - me consiguió una solución rápida -
Rohit Kumar