224 votes

Comment définir l'opacité (alpha) d'une vue dans Android ?

J'ai un bouton comme dans l'exemple suivant :

<Button 
     android:text="Submit" 
     android:id="@+id/Button01" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content">
</Button>

Dans mon onCreate() j'appelle le bouton 01 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é de Java, ou est-ce que je peux le faire dans le fichier main.xml ?

Du côté java, j'ai essayé Button01.mutate().SetAlpha(100) mais cela m'a donné une erreur.

587voto

Jakobud Points 14581

Je suis étonné par le fait que tous les autres BEAUCOUP des réponses plus compliquées.

XML

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

android:color="#66FF0000"    // Partially transparent red

Dans l'exemple ci-dessus, la couleur serait un rouge partiellement transparent.

Lorsque vous définissez la couleur d'une vue, le format peut être soit #RRGGBB ou #AARRGGBBAA est la valeur alpha hexagonale. FF serait totalement opaque et 00 serait totalement transparent.

Dynamiquement

Si vous avez besoin de modifier dynamiquement l'opacité dans votre code, utilisez

myButton.getBackground().setAlpha(128);  // 50% transparent

Où l'INT va de 0 (totalement transparent) à 255 (totalement opaque).

20 votes

Ce n'est toujours pas la solution si vous avez un dessinable composé

6 votes

Définir la couleur verte semi-transparente de la vue : <RelativeLayout Android:background="#8700FF00"/>

2 votes

La vue n'a pas android:color attribut.

218voto

abhi Points 1807

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 procéder comme suit :

btnMybutton.getBackground().setAlpha(45);

Ici, j'ai réglé l'opacité à 45. En fait, vous pouvez la régler entre 0 (totalement transparent) à 255 (complètement opaque)

5 votes

Cette fonction n'est disponible que sur l'API 11+. developer.Android.com/reference/Android/view/

8 votes

@Graeme vous avez fait un lien vers la méthode setAlpha de la classe View, mais l'article utilise la méthode setAlpha de la classe Drawable. La méthode getBackground renvoie un Drawable. Cette méthode est issue du niveau 1 de l'API. developer.Android.com/reference/Android/graphics/drawable/

0 votes

Oh, intéressant ! Je n'avais pas vu cela. Cela signifie-t-il que le texte est entièrement visible même si l'arrière-plan est transparent ?

67voto

Akos Cz Points 3880

Ce que je vous suggère de faire, c'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 le fond 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 un bouton Ressource dessinable de forme où vous définissez les propriétés auxquelles le bouton doit 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>

Utilisez-le ensuite comme arrière-plan du bouton :

    android:background="@drawable/rounded_corner_box"

6 votes

Si vous avez du mal à convertir une opacité de 40% en une valeur hexagonale, vous pouvez utiliser la recherche google "40% de 255 en hex" qui donne la valeur hexagonale pour 40%.

65voto

RoToRa Points 20081

Je viens de trouver votre question alors que j'avais le même problème avec un TextView. J'ai pu le résoudre en étendant le TextView et en surchargeant la fonction onSetAlpha . Vous pourriez peut-être 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;
  }
}

13 votes

Merci, cela m'a aussi aidé. Cependant, il est ridicule qu'un TextView et un ImageView aient des façons différentes de définir l'alpha.

0 votes

Cela m'a aussi aidé à appliquer l'effet de clic sur la vue de l'image sans deuxième ressource. Merci !

18voto

Josnidhin Points 5408
android:background="@android:color/transparent"

Ce qui précède est quelque chose que je connais... Je pense que la création d'une classe de bouton personnalisée est la meilleure idée.

Niveau 11 de l'API
Récemment, je suis tombé sur ce Android:alpha qui prend une valeur comprise entre 0 et 1. La méthode correspondante est la suivante setAlpha(float) .

1 votes

Salut Josnidhin. Je vous remercie pour votre réponse. Mais cela rend l'ensemble du bouton complètement transparent. Ce que je cherche, c'est à mettre une certaine opacité (peut-être via une valeur alpha) sur le bouton.

0 votes

C'est un flottant, vous pouvez donc utiliser des valeurs ENTRE 0 et 1, 0,5 par exemple.

0 votes

@StackOverflowed - je crois que ncakmak voulait dire la première solution. réglage @android:color/transparent comme Arrière-plan rendra effectivement la vue complètement transparente. Le site @android:alpha - La partie semble être un addendum.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X