Arrière-plan du bouton transparent

177

J'ai un bouton. Lorsque j'appuie sur le bouton, je dois rendre le texte en gras sinon normal. J'ai donc écrit des styles pour gras et normal.

<style name="textbold" parent="@android:style/TextAppearance">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textStyle">bold</item>
</style>
<style name="textregular" parent="@android:style/TextAppearance">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textStyle">normal</item>
</style>

Maintenant, j'ai un button_states.xml comme:

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:state_pressed="true"
    style="@style/textbold" />
<item android:state_focused="false" android:state_pressed="true"
    style="@style/textregular" />

<item style="@style/textregular" />
</selector> 

Dans ma mise en page pour ce bouton, je dois rendre l'arrière-plan transparent aussi ... Comment vais-je le faire? Mon code de mise en page est:

<Button android:id="@+id/Btn" android:background="@drawable/button_states" />

Comment vais-je inclure un arrière-plan transparent dans mon style?

Anju
la source
3
Tant de bonnes réponses pourraient être acceptées maintenant ...
QED
Découvrez cette réponse ici pour faire un bouton transparent avec bordure
Basheer AL-MOMANI
'pourquoi n'utilisez-vous pas simplement un TextView et n'appelez pas l'action sur onClick?
Dula wnRp

Réponses:

360

Pour rendre un arrière-plan transparent, faites-le android:background="@android:color/transparent".

Cependant, votre problème semble être un peu plus profond, car vous utilisez les sélecteurs d'une manière vraiment étrange. La façon dont vous l'utilisez semble incorrecte, bien que si cela fonctionne réellement, vous devriez mettre l'image d'arrière-plan dans le style en tant que fichier <item/>.

Regardez de plus près comment les styles sont utilisés dans la source Android. Bien qu'ils ne changent pas le style du texte en cliquant sur les boutons, il existe de nombreuses bonnes idées sur la façon d'atteindre vos objectifs.

Steve Pomeroy
la source
1
Jetez un œil à ma réponse clarifiée. J'ai mal lu votre problème pour commencer. L'arrière-plan est défini dans le style.
Steve Pomeroy
Désolé, je ne suis pas sûr de la solution. Il suffit de définir @android: color / transparent ne prend pas en charge les styles au toucher des boutons normaux (et équivaut à définir l'arrière-plan sur @null).
gatoatigrado
@gatoatigrado: voulez-vous dire que vous voulez qu'une zone transparente soit encadrée en orange ou ombrée dans quoi? Si tel est le cas, vous devrez créer des images personnalisées à 9 patchs pour cela.
Steve Pomeroy
@StevePomeroy, oui, l'effet de bouton par défaut sur Android 4.1 est que [sur pression de bouton] l'arrière-plan soit bleu clair, avec un contour bleu encore plus clair.
gatoatigrado
@gatoatigrado: d'accord. Si vous le souhaitez, vous ne pouvez pas utiliser de bouton transparent. Je ne suis pas sûr de ce que vous essayez d'accomplir.
Steve Pomeroy
121

Essayez une nouvelle façon de définir l'arrière-plan transparent

    android:background="?android:attr/selectableItemBackground"
Muhammad Aamir Ali
la source
9
C'est ce que je recommanderais d'utiliser. De cette façon, vous pouvez conserver les belles animations de conception matérielle pour vos boutons =)
Ryan Newsom
c'est une meilleure réponse
Marcos Dávalos
35

utilisez #0000(seulement quatre zéros sinon cela sera considéré comme black) c'est le code couleur pour transparent. Vous pouvez l'utiliser directement mais je vous recommande de définir une couleur dans color.xml afin que vous puissiez profiter de la réutilisation du code.

Prasham
la source
9
Heureusement, cela a déjà été défini pour nous comme@android:color/transparent
Richard Le Mesurier
34

Ajoutez ceci dans votre Xml -android:background="@android:color/transparent"

        <Button
            android:id="@+id/button1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="Button"
            android:background="@android:color/transparent"
            android:textStyle="bold"/>
Mohanraj
la source
32

Vous pouvez également utiliser: dans votre xml:

android:background="@null"

ou en code:

buttonVariable.setBackgroundColor(Color.TRANSPARENT);
Hunkeone
la source
Votez pour donner des alternatives, aimez voir toutes les options!
Burkely91
18

J'ai réalisé cela avec en XML avec

android:background="@android:color/transparent"
C. Skjerdal
la source
9

j'ai utilisé

btn.setBackgroundColor(Color.TRANSPARENT);

et

android:background="@android:color/transparent"
Sindri Þór
la source
btn.setBackgroundColor (Color.TRANSPARENT); fonctionne bien pour moi
jay_mziray
8

Les sélecteurs ne fonctionnent que pour les dessins, pas pour les styles. Référence


Tout d'abord , pour rendre l'arrière-plan du bouton transparent, utilisez l'attribut suivant car cela n'affectera pas les animations de conception matérielle:

style="?attr/buttonBarButtonStyle"

Il existe de nombreuses façons de personnaliser votre bouton. Consultez ce tutoriel .

Deuxièmement , pour rendre le texte en gras lorsque vous appuyez sur, utilisez ce code java:

btn.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {

        switch (event.getAction()) {
            // When the user clicks the Button
            case MotionEvent.ACTION_DOWN:
                btn.setTypeface(Typeface.DEFAULT_BOLD);
                break;

            // When the user releases the Button
            case MotionEvent.ACTION_UP:
                btn.setTypeface(Typeface.DEFAULT);
                break;
        }
        return false;
    }
});
Faraz
la source
1

Vous pouvez y parvenir en définissant le canal alpha des couleurs.

La palette de couleurs est comme celle-ci #AARRGGBB: A représente le canal alpha (transparence), R représente le rouge, G le vert et B le bleu.

Raphael S
la source
1

Étape 1: créer un nouveau fichier de ressources dans drawable et copier-coller

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <stroke android:color="#fff" android:width="2dp"/>
    <corners android:radius="25dp"/>
    <padding android:right="15dp" android:top="15dp" android:bottom="15dp" android:left="15dp"/>
</shape>

enregistrez-le sous ButtonUI (disons)

Étape 2: appliquer l'interface utilisateur au bouton xml

<Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="join the crew"
  android:background="@drawable/ButtonUI"
  android:textColor="#fff"/>
Viraj Singh
la source
0

Code:

button.setVisibility(View.INVISIBLE);

Xml:

android:background="@android:color/transparent"
Chef Madog
la source
0

Nous pouvons utiliser l'attribut android: background dans Button xml comme ci-dessous.

android:background="?android:attr/selectableItemBackground"

Ou nous pouvons utiliser le style

style="?android:attr/borderlessButtonStyle" pour un fond transparent et sans ombre.

Shihab Uddin
la source
-2

Vous appliquez la couleur d'arrière-plan comme transparent(light gray)lorsque vous cliquez sur le bouton.

ButtonName.setOnClickListener()

Dans la méthode ci-dessus, vous définissez la couleur d'arrière-plan du bouton.

Pinki
la source
6
Inquiet que cela ait été voté pour. Ne fais pas ça, s'il te plaît. Le futur responsable maudira votre nom. Définissez un arrière-plan avec un sélecteur et ayez une couleur / dessinable pour pressé et une pour non. N'écrivez pas de code pour le changer dans l'auditeur - ce n'est PAS ainsi que cela se fait.
themightyjon
-2

Vous pouvez le faire facilement en ajoutant l'attribut ci-dessous dans le fichier xml. Ce code a été testé beaucoup de temps.

android:background="@android:color/transparent"
Chamath Jeevan
la source
2
Pourquoi ajouter cette réponse? Cette solution se trouve déjà dans deux autres réponses, dont celle avec le plus de votes.
Makyen