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

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.


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.


59

Kotlin

stateListAnimator = null

Java

setStateListAnimator(null);

XML

android:stateListAnimator="@null"

2
Facile et propre.
JCasso

23

essayez: android:stateListAnimator="@null"


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


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>

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

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>


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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.