web-dev-qa-db-ja.com

カスタムビューで標準属性Android:textを使用する方法は?

RelativeLayoutを拡張するカスタムビューを作成しました。私のビューにはテキストがあるので、標準のAndroid:textwithoutを使用し、<declare-styleable>withoutカスタムビューを使用するたびにカスタム名前空間xmlns:xxxを使用する。

これは、カスタムビューを使用するxmlです。

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

どうすれば属性値を取得できますか?私はAndroid:text属性を取得できると思います

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

しかし、この場合の???とは何ですか(attr.xmlのスタイル設定なし)?

58
Seraphim's

これを使って:

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();
}

私はあなたがアイデアを得たことを願っています

87
pskink

[〜#〜] edit [〜#〜]

別の方法(declare-styleableを指定するが、カスタム名前空間を宣言する必要なし)は次のとおりです。

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();

これは一般的なAndroidカスタムビューから標準属性を抽出する方法です。

Android APIでは、内部R.styleableクラスを使用して標準属性を抽出し、R.styleableを使用して標準属性を抽出する他の代替手段を提供していないようです。

オリジナルポスト

標準コンポーネントからすべての属性を確実に取得するには、次を使用する必要があります。

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();

別の標準コンポーネントの属性が必要な場合は、別のTypedArrayを作成してください。

標準コンポーネントで利用可能なTypedArrayの詳細については、 http://developer.Android.com/reference/Android/R.styleable.html をご覧ください。

37
J. Beck