web-dev-qa-db-fra.com

Comment utiliser l'attribut standard Android: texte dans ma vue personnalisée?

J'ai écrit un vue personnalisée qui étend RelativeLayout. Ma vue contient du texte, je souhaite donc utiliser la norme Android:textsans la nécessité de spécifier un <declare-styleable> et sans en utilisant un espace de noms personnalisé xmlns:xxx chaque fois que j'utilise ma vue personnalisée.

c'est le xml où j'utilise ma vue personnalisée:

<my.app.StatusBar
    Android:id="@+id/statusBar"
    Android:text="this is the title"/>

Comment puis-je obtenir la valeur d'attribut? Je pense que je peux obtenir l'attribut Android: text avec

TypedArray a = context.obtainStyledAttributes(attrs,  ???);

mais comment ça ??? dans ce cas (sans styleable dans attr.xml)?

58
Seraphim's

utilisez ceci:

public YourView(Context context, AttributeSet attrs) {
    super(context, attrs);
    int[] set = {
        Android.R.attr.background, // idx 0
        Android.R.attr.text        // idx 1
    };
    TypedArray a = context.obtainStyledAttributes(attrs, set);
    Drawable d = a.getDrawable(0);
    CharSequence t = a.getText(1);
    Log.d(TAG, "attrs " + d + " " + t);
    a.recycle();
}

j'espère que vous avez une idée

87
pskink

[~ # ~] modifier [~ # ~]

Une autre façon de le faire (en spécifiant un style déclarable mais sans avoir à déclarer un espace de noms personnalisé) est la suivante:

attrs.xml:

<declare-styleable name="MyCustomView">
    <attr name="Android:text" />
</declare-styleable>

MyCustomView.Java:

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView);
CharSequence t = a.getText(R.styleable.MyCustomView_Android_text);
a.recycle();

Cela semble être la manière générique Android d'extraire les attributs standard des vues personnalisées.

Dans l'API Android Android, ils utilisent une classe R.styleable interne pour extraire les attributs standard et ne semblent pas offrir d'autres alternatives d'utiliser R.styleable pour extraire les attributs standard.

Message d'origine

Pour vous assurer d'obtenir tous les attributs du composant standard, vous devez utiliser les éléments suivants:

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TextView);
CharSequence t = a.getText(R.styleable.TextView_text);
int color = a.getColor(R.styleable.TextView_textColor, context.getResources().getColor(Android.R.color.darker_gray)); // or other default color
a.recycle();

Si vous voulez des attributs d'un autre composant standard, créez simplement un autre TypedArray.

Voir http://developer.Android.com/reference/Android/R.styleable.html pour les détails des TypedArrays disponibles pour les composants standard.

37
J. Beck