J’ai un bouton comme ci-dessous:
Dans mon onCreate()
, j’appelle Button01 comme ceci:
setContentView(R.layout.main); View Button01 = this.findViewById(R.id.Button01); Button01.setOnClickListener(this);
Il y a un arrière-plan dans l’application et je veux définir une opacité sur ce bouton d’envoi. Comment puis-je définir une opacité pour cette vue? Est-ce quelque chose que je peux définir du côté java ou puis-je définir dans le fichier main.xml?
Du côté java, j’ai essayé Button01.mutate().SetAlpha(100)
, mais cela m’a donné une erreur.
Je viens de trouver votre question tout en ayant le même problème avec un TextView. J’ai pu le résoudre en étendant TextView et en onSetAlpha
. Peut-être que vous pourriez essayer quelque chose de similaire avec votre bouton:
import android.content.Context; import android.util.AtsortingbuteSet; import android.widget.TextView; public class AlphaTextView extends TextView { public AlphaTextView(Context context) { super(context); } public AlphaTextView(Context context, AtsortingbuteSet attrs) { super(context, attrs); } public AlphaTextView(Context context, AtsortingbuteSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean onSetAlpha(int alpha) { setTextColor(getTextColors().withAlpha(alpha)); setHintTextColor(getHintTextColors().withAlpha(alpha)); setLinkTextColor(getLinkTextColors().withAlpha(alpha)); return true; } }
Je suis étonné par les réponses BEAUCOUP plus compliquées de tout le monde.
Vous pouvez très simplement définir l’alpha dans la définition de couleur du bouton (ou de toute autre vue) dans votre fichier XML:
android:color="#66FF0000" // Partially transparent red
Dans l’exemple ci-dessus, la couleur serait un rouge partiellement transparent.
Lors de la définition de la couleur d’une vue, le format peut être #RRGGBB
ou #AARRGGBB
, où AA
est la valeur alpha hexadécimale. FF
serait totalement opaque et 00
serait totalement transparent.
Si vous avez besoin de modifier dynamicment l’opacité de votre code, utilisez
myButton.getBackground().setAlpha(128); // 50% transparent
Où INT va de 0
(entièrement transparent) à 255
(complètement opaque).
Je suppose que vous avez peut-être déjà trouvé la réponse, mais sinon (et pour les autres développeurs), vous pouvez le faire comme ceci:
btnMybutton.getBackground().setAlpha(45);
Ici, j’ai réglé l’opacité à 45. Vous pouvez en gros le régler entre 0 (entièrement transparent) et 255 (complètement opaque)
Je vous suggère de créer une couleur ARVB personnalisée dans votre fichier colors.xml, par exemple:
#80000000
puis définissez l’arrière-plan de votre bouton à cette couleur:
android:background="@android:color/translucent_black"
Une autre chose que vous pouvez faire si vous voulez jouer avec la forme du bouton est de créer une ressource pouvant être dessinée sous forme de Shape, dans laquelle vous définissez les propriétés du bouton:
fichier: res / drawable / rounded_corner_box.xml
Ensuite, utilisez cela comme arrière-plan du bouton:
android:background="@drawable/rounded_corner_box"
Selon la vue de documents Android, l’alpha est une valeur comprise entre 0 et 1. Donc, pour le définir, utilisez quelque chose comme ceci:
View v; v.setAlpha(.5f);
Beaucoup plus facile de ce qui précède. L’atsortingbut alpha par défaut est là pour le bouton
android:alpha="0.5"
La plage est comprise entre 0 pour une transparence complète et 1 pour une opacité complète.
android:background="@android:color/transparent"
Ce que je sais de ce qui précède … Je pense que créer une classe de boutons personnalisée est la meilleure idée
Niveau API 11
Récemment, je suis tombé sur cet Android: alpha xml atsortingbut qui prend une valeur entre 0 et 1. La méthode correspondante est setAlpha (float) .
Bien que btnMybutton.getBackground().setAlpha(45);
est une bonne idée, il suffit d’appliquer alpha à l’arrière-plan et non à la vue entière.
Si vous voulez appliquer alpha à la vue, utilisez btnMybutton.setAlpha(0.30f);
au lieu. Cela applique l’opacité à la vue. Il accepte une valeur comprise entre 0 et 1.
Doc dit:
Définit l’opacité de la vue. C’est une valeur de 0 à 1, où 0 signifie que la vue est complètement transparente et 1 signifie que la vue est complètement opaque. Si cette vue remplace onSetAlpha (int) pour renvoyer true, cette vue est responsable de l’application de l’opacité elle-même. Sinon, appeler cette méthode équivaut à appeler setLayerType (int, android.graphics.Paint) et à définir une couche matérielle. Notez que la définition de l’alpha sur une valeur translucide (0
J’ai rencontré ce problème avec ICS / JB car les boutons par défaut du thème Holo sont des images légèrement transparentes. Pour un arrière-plan, cela est particulièrement visible.
Pain d’épices vs ICS +:
Copier tous les états et images pouvant être dessinés pour chaque résolution et rendre les images transparentes solides est un problème. J’ai donc opté pour une solution plus sale: enroulez le bouton sur un support qui a un fond blanc. Voici un fichier XML extractible (ButtonHolder) qui fait exactement cela:
Votre fichier XML
ButtonHolder.xml
-
styles.xml
. . . . . .
Cependant, il en résulte une bordure blanche, car les images du bouton Holo incluent des marges pour tenir compte de l’espace enfoncé:
Donc, la solution consiste à donner au fond blanc une marge (4dp travaillées pour moi) et des coins arrondis (2dp) pour masquer complètement le blanc et rendre le bouton solide:
ButtonHolder.xml
-
-
Le résultat final ressemble à ceci:
Vous devez cibler ce style pour v14 + et le modifier ou l’exclure pour Gingerbread / Honeycomb, car la taille de leurs images natives est différente de celle d’ICS et de JB (par exemple, le style derrière un bouton Gingerbread
Pour une vue, vous pouvez définir l’opacité comme suit.
view_name.setAlpha(float_value);
La propriété view.setAlpha(int)
est obsolète pour la version de l’API supérieure à 11. Désormais, une propriété comme .setAlpha(0.5f)
est utilisée.
Pour API <11 pour la couleur textView, j'ai fait ce qui suit:
int textViewColor = textView.getTextColors().getDefaultColor(); textView.setTextColor(Color.argb(128, Color.red(textViewColor), Color.green(textViewColor), Color.blue(textViewColor))); //50% transparent
Un peu lourd, mais bon, ça marche 🙂
Je sais que cela a déjà un tas de réponses, mais j’ai trouvé que pour les boutons, il est juste plus facile de créer vos propres sélecteurs .xml et de définir cela en arrière-plan dudit bouton. De cette façon, vous pouvez également modifier l’état lorsqu’il est appuyé ou activé, etc. Voici un extrait rapide de celui que j’utilise. Si vous souhaitez append une transparence à l’une des couleurs, ajoutez une valeur hexadécimale principale (#XXcccccc). (XX == “alpha de couleur”)
-
-