Comment définir l’opacité (Alpha) pour View dans Android

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.

    XML

    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.

    Dynamiquement

    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 +:

    pain d'épiceICS

    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é:

    Trop de blancTrop de blanc pressé

    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:

    Pas de blancPas de blanc pressé

    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”)