J'ai un bouton comme dans ce qui suit:
<Button
Android:text="Submit"
Android:id="@+id/Button01"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content">
</Button>
Dans mon événement onCreate()
, j'appelle Button01 comme suit:
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 souhaite définir une opacité sur ce bouton d'envoi. Comment définir une opacité pour cette vue? Est-ce quelque chose que je peux définir du côté Java ou puis-je le définir dans le fichier main.xml?
Du côté Java, j'ai essayé Button01.mutate().SetAlpha(100)
, mais cela m'a causé une erreur.
Je viens de trouver votre question tout en ayant le même problème avec un TextView. J'ai pu résoudre ce problème en développant TextView et en remplaçant onSetAlpha
. Peut-être que vous pourriez essayer quelque chose de similaire avec votre bouton:
import Android.content.Context;
import Android.util.AttributeSet;
import Android.widget.TextView;
public class AlphaTextView extends TextView {
public AlphaTextView(Context context) {
super(context);
}
public AlphaTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public AlphaTextView(Context context, AttributeSet 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 émerveillé par les réponses beaucoup plus compliquées _ de tous les autres .
Vous pouvez très simplement définir l'alpha dans la définition de la couleur du bouton (ou de toute autre vue) dans votre code 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 soit #RRGGBB
, soit #AARRGGBB
, où AA
est la valeur hexadécimale alpha. FF
serait complètement opaque et 00
serait complètement transparent.
Si vous devez modifier dynamiquement l'opacité dans votre code, utilisez
myButton.getBackground().setAlpha(128); // 50% transparent
Où INT varie de 0
(totalement transparent) à 255
(totalement opaque).
Je suppose que vous avez peut-être déjà trouvé la réponse, mais si ce n’est pas le cas (et pour les autres développeurs), vous pouvez le faire comme ceci:
btnMybutton.getBackground().setAlpha(45);
Ici, j'ai défini l'opacité sur 45. Vous pouvez le définir entre n'importe quoi entre (totalement transparent) et 255 (complètement opaque)
Ce que je vous suggère de faire est de créer un fichier personnalisé couleur ARGB dans votre fichier colors.xml, tel que:
<resources>
<color name="translucent_black">#80000000</color>
</resources>
puis définissez l’arrière-plan de votre bouton sur 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 un ressource pouvant être dessinée par une forme où vous définissez les propriétés à quoi le bouton devrait ressembler:
fichier: res/drawable/rounded_corner_box.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle">
<gradient
Android:startColor="#80000000"
Android:endColor="#80FFFFFF"
Android:angle="45"/>
<padding Android:left="7dp"
Android:top="7dp"
Android:right="7dp"
Android:bottom="7dp" />
<corners Android:radius="8dp" />
</shape>
Ensuite, utilisez-le comme arrière-plan du bouton:
Android:background="@drawable/rounded_corner_box"
Selon l'alpha de la vue Android _, la valeur 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'attribut 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 qui précède est quelque chose que je sais ... Je pense que la meilleure idée est de créer une classe de boutons personnalisée.
API niveau 11
Récemment, j’ai rencontré cet attribut Android: alpha xml qui prend une valeur comprise entre 0 et 1. La méthode correspondante est setAlpha (float) .
Bien que btnMybutton.getBackground().setAlpha(45);
soit une bonne idée, elle applique simplement l'alpha à l'arrière-plan et non à la vue entière.
Si vous souhaitez appliquer alpha à l'affichage, utilisez plutôt btnMybutton.setAlpha(0.30f);
. Ceci applique l'opacité à la vue. Il accepte une valeur comprise entre 0 et 1.
Doc dit:
Définit l'opacité de la vue. Il s’agit d’une valeur comprise entre 0 et 1, où 0 signifie que la vue est complètement transparente et 1, que la vue est complètement opaque. Si cette vue remplace onSetAlpha (int) pour renvoyer true, cette vue est chargée d'appliquer l'opacité elle-même. Sinon, l'appel de cette méthode équivaut à appeler setLayerType (int, Android.graphics.Paint) et à définir une couche matérielle. Notez que définir alpha sur une valeur translucide (0 <alpha <1) peut avoir des conséquences sur les performances. Il est généralement préférable d'utiliser la propriété alpha avec modération et de manière transitoire, comme dans le cas des animations en fondu.
J'ai rencontré ce problème avec ICS/JB car les boutons par défaut du thème Holo consistent en des images légèrement transparentes. Pour un fond cela est particulièrement remarquable.
pain d'épices contre ICS +:
Copier tous les états et toutes les images pouvant être dessinés pour chaque résolution et rendre les images transparentes solides est une tâche difficile. J'ai donc opté pour une solution plus sale: placer le bouton dans un support doté d'un fond blanc. Voici un XML brut pouvant être dessiné (ButtonHolder) qui fait exactement cela:
Votre fichier XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
style="@style/Content">
<RelativeLayout style="@style/ButtonHolder">
<Button Android:id="@+id/myButton"
style="@style/Button"
Android:text="@string/proceed"/>
</RelativeLayout>
</LinearLayout>
ButtonHolder.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
<shape Android:shape="rectangle">
<solid Android:color="@color/white"/>
</shape>
</item>
</layer-list>
styles.xml
.
.
.
<style name="ButtonHolder">
<item name="Android:layout_height">wrap_content</item>
<item name="Android:layout_width">wrap_content</item>
<item name="Android:background">@drawable/buttonholder</item>
</style>
<style name="Button" parent="@Android:style/Widget.Button">
<item name="Android:layout_height">wrap_content</item>
<item name="Android:layout_width">wrap_content</item>
<item name="Android:textStyle">bold</item>
</style>
.
.
.
Toutefois, cela entraîne une bordure blanche car les images du bouton Holo incluent des marges pour tenir compte de l'espace pressé:
La solution est donc de donner au fond blanc une marge (4dp travaillée pour moi) et des coins arrondis (2dp) pour masquer complètement le blanc tout en rendant le bouton solide:
ButtonHolder.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
<shape Android:shape="rectangle">
<solid Android:color="@Android:color/transparent"/>
</shape>
</item>
<item Android:top="4dp" Android:bottom="4dp" Android:left="4dp" Android:right="4dp">
<shape Android:shape="rectangle">
<solid Android:color="@color/white"/>
<corners Android:radius="2dp" />
</shape>
</item>
</layer-list>
Le résultat final ressemble à ceci:
Vous devez cibler ce style pour v14 + et modifier ou l'exclure pour Gingerbread/Honeycomb car leurs tailles d'image de bouton natives diffèrent de ICS et de JB (par exemple, le style exact situé derrière un bouton Gingerbread entraîne un petit blanc sous le bouton).
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 l'API <11 pour la couleur textView, j'ai procédé comme suit:
int textViewColor = textView.getTextColors().getDefaultColor();
textView.setTextColor(Color.argb(128, Color.red(textViewColor), Color.green(textViewColor), Color.blue(textViewColor))); //50% transparent
Un peu encombrant, 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 tout simplement plus facile de créer vos propres sélecteurs .xml et de le définir à l’arrière-plan dudit bouton. De cette façon, vous pouvez également changer l'état lorsque vous appuyez sur ou activé, etc. Voici un extrait de celui que j’utilise. Si vous souhaitez ajouter une transparence à l'une des couleurs, ajoutez une valeur hexadécimale (#XXcccccc). (XX == "alpha de couleur")
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_pressed="true" >
<shape>
<solid
Android:color="#70c656" />
<stroke
Android:width="1dp"
Android:color="#53933f" />
<corners
Android:radius="4dp" />
<padding
Android:left="10dp"
Android:top="10dp"
Android:right="10dp"
Android:bottom="10dp" />
</shape>
</item>
<item>
<shape>
<gradient
Android:startColor="#70c656"
Android:endColor="#53933f"
Android:angle="270" />
<stroke
Android:width="1dp"
Android:color="#53933f" />
<corners
Android:radius="4dp" />
<padding
Android:left="10dp"
Android:top="10dp"
Android:right="10dp"
Android:bottom="10dp" />
</shape>
</item>
</selector>