Comment supprimer l'ombre du bouton (Android)

Réponses:

404

Une autre alternative consiste à ajouter

style="?android:attr/borderlessButtonStyle"

à votre Button xml comme documenté ici http://developer.android.com/guide/topics/ui/controls/button.html

Un exemple serait

<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
la source
Cela supprime le style de bouton, ei l'ombre et le relief. L'ajout d'un sélecteur avec des formes est facultatif. C'est une réponse plus précise.
Juan José Melero Gómez
35
De plus, j'utilise un style personnalisé pour mon bouton. vous pouvez étendre votre style personnalisé à partir de: <style name = "MyCustomButtonStyle" parent = "Widget.AppCompat.Button.Borderless">
Tobliug
125

Une méthode plus simple consiste à ajouter cette balise à votre bouton:

android:stateListAnimator="@null"

bien qu'il nécessite un niveau d'API 21 ou plus.

Alon Kogan
la source
2
A beaucoup travaillé pour moi
KoreanXcodeWorker
1
j'aime mieux cette méthode, elle est plus flexible.
Ayejuni Ilemobayo Kings
@Alon Kogan, existe-t-il une rétrocompatibilité pour l'utilisation de l' android:stateListAnimator attribut?
blueware
Cette solution vous permet de créer un robot de style devant hériter du borderlessButtonStylestyle, ce qui vous donne plus de flexibilité.
Juan José Melero Gómez
c'est la seule solution qui fonctionne pour moi, la balise borderlessButtonStyle n'a pas fonctionné, car je dois me débarrasser de l'ombre pendant que le bouton est enfoncé
ACAkgul
61

J'utilise un style personnalisé

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

N'oubliez pas d'ajouter

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

sinon, le texte du bouton sera en majuscules.

郑松岚
la source
59

Kotlin

stateListAnimator = null

Java

setStateListAnimator(null);

XML

android:stateListAnimator="@null"
Michael
la source
2
Facile et propre.
JCasso
23

essayez: android:stateListAnimator="@null"

Seth
la source
9
Bien que cela puisse résoudre le problème du PO, je recommanderais d'y ajouter un peu de contexte. Pourquoi cela aidera-t-il? En outre, «essayez ceci» est un peu trompeur. Êtes-vous sûr que cela résoudra le problème, ou simplement deviner? Si tel est le cas, vous devriez plutôt écrire un commentaire.
GergelyPolonkai
Il nécessite l'API 21.
CoolMind
14

Les boutons de conception de matériaux ajoutent au bouton xml: style="@style/Widget.MaterialComponents.Button.UnelevatedButton"

Efi G
la source
Parfois, il est similaire à stackoverflow.com/a/38004981/2914140 , mais un bouton gris à l'état désactivé devient plus clair.
CoolMind
6

L'utiliser comme arrière-plan de votre bouton peut vous aider, changez la couleur selon vos besoins

<?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
la source
4
Pouvez-vous expliquer comment cela fonctionne? Cela n'a pas supprimé l'ombre portée pour moi.
CACuzcatlan
il remplace l'arrière-plan d'origine par des ombres, avec ce fond de couleur unie
dlohani
3

la réponse @ Alt-Cat fonctionne pour moi!

R.attr.borderlessButtonStyle ne contient pas d'ombre.

et le document de bouton est génial.

En outre, vous pouvez définir ce style sur votre bouton personnalisé, dans le deuxième constructeur.

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

Toutes les réponses ci-dessus sont excellentes, mais je suggérerai une autre option:

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

Duc Thang
la source
Il est similaire à Alon Kogan ( stackoverflow.com/a/39122825/2914140 ).
CoolMind
en quoi est-ce différent de 5ish de ci-dessus?
zeroDivider
2

Au lieu d'un Button, vous pouvez utiliser un TextView et ajouter un écouteur de clic dans le code java.

C'est à dire

dans la mise en page d'activité 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" />

dans le fichier java d'activité:

TextView btnTextView = (TextView) findViewById(R.id.btn_text_view);
btnTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // handler code
            }
        });
caitcoo0odes
la source
Ce n'est pas la bonne réponse, mais vous m'avez en fait aidé à résoudre mon problème avec un problème similaire, alors merci!
boîte du
aha! belle idée - m'a apporté une solution rapide -
Rohit Kumar