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.