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

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


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.


59

Kotlin

stateListAnimator = null

Java

setStateListAnimator(null);

XML

android:stateListAnimator="@null"

2
Fácil y limpio
JCasso

23

tratar : android:stateListAnimator="@null"


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


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>

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

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>


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.