Como remover shadow do botão (android)

Respostas:

403

Outra alternativa é adicionar

style="?android:attr/borderlessButtonStyle"

ao seu Button xml, conforme documentado aqui http://developer.android.com/guide/topics/ui/controls/button.html

Um exemplo seria

<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
fonte
Isso remove o estilo do botão, a sombra e o relevo. Adicionar um seletor com formas é opcional. Esta é uma resposta mais precisa.
Juan José Melero Gómez
35
Além disso, eu uso um estilo personalizado para o meu botão. você pode estender o seu estilo personalizado a partir de: <nome do style = pai "MyCustomButtonStyle" = "Widget.AppCompat.Button.Borderless">
Tobliug
125

Uma maneira mais simples de fazer isso é adicionar essa tag ao seu botão:

android:stateListAnimator="@null"

embora exija API nível 21 ou mais ..

Alon Kogan
fonte
2
Trabalhou muito para mim
KoreanXcodeWorker 3/17/17
1
eu amo esse método melhor, é mais flexível.
Ayejuni Ilemobayo Reis
@Alon Kogan, existe alguma compatibilidade com versões anteriores para usar o android:stateListAnimator atributo?
blueware 19/06/19
Esta solução permite que você crie um bot de estilo que precisa herdar do borderlessButtonStyleestilo, o que oferece mais flexibilidade.
Juan José Melero Gómez
esta é a única solução que funcionou para mim, a tag borderlessButtonStyle não funcionou, pois eu preciso me livrar da sombra enquanto o botão está sendo pressionado.
ACAkgul
61

Eu uso um estilo personalizado

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

Não esqueça de adicionar

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

caso contrário, o texto do botão estará no UpperCase.

郑松岚
fonte
59

Kotlin

stateListAnimator = null

Java

setStateListAnimator(null);

XML

android:stateListAnimator="@null"
Michael
fonte
2
Fácil e limpo.
JCasso
23

experimentar : android:stateListAnimator="@null"

Seth
fonte
9
Embora isso possa resolver o problema do OP, eu recomendo adicionar algum contexto a ele. Por que isso vai ajudar? Além disso, "tentar isso" é um pouco enganador. Tem certeza de que resolverá o problema ou apenas adivinhe? Nesse caso, você deve escrever um comentário.
GergelyPolonkai
Ela exige API 21.
CoolMind
14

Os botões de design de materiais adicionam ao botão xml: style="@style/Widget.MaterialComponents.Button.UnelevatedButton"

Efi G
fonte
Às vezes, é semelhante a stackoverflow.com/a/38004981/2914140 , mas um botão cinza no estado desativado fica mais claro.
CoolMind 01/08/19
6

Usar isso como plano de fundo para o botão pode ajudar, altere a cor de acordo com as suas necessidades

<?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
fonte
4
Você pode explicar como isso funciona? Não removeu a sombra projetada para mim.
CACuzcatlan
ele substitui fundo original com sombras, com este fundo com cor sólida
dlohani
3

a resposta @ Alt-Cat funciona para mim!

R.attr.borderlessButtonStyle não contém sombra.

e o documento do botão é ótimo.

Além disso, você pode definir esse estilo no botão personalizado, no segundo construtor.

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

Todas as respostas acima são ótimas, mas vou sugerir uma outra opção:

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

Duc Thang
fonte
É semelhante ao Alon Kogan ( stackoverflow.com/a/39122825/2914140 ).
CoolMind
como isso é diferente do 5ish acima?
zeroDivider
2

Em vez de um botão, você pode usar um TextView e adicionar um ouvinte de clique no código java.

Ou seja,

no xml do layout da atividade:

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

no arquivo java de atividade:

TextView btnTextView = (TextView) findViewById(R.id.btn_text_view);
btnTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // handler code
            }
        });
caitcoo0odes
fonte
Esta não é a resposta correta, mas você realmente me ajudou a corrigir meu problema com um problema semelhante, então obrigado!
box
aha! boa idéia - me fez uma rápida correção -
Rohit Kumar