Как использовать стандартный атрибут android: текст в моем пользовательском представлении?


Я написал представление что расширяет RelativeLayout. В моем представлении есть текст, поэтому я хочу использовать стандартный android:textбез необходимо указать <declare-styleable> и без использование пользовательского пространства имен xmlns:xxx каждый раз, когда я использую свой пользовательский вид.

это xml, где я использую свой пользовательский вид:

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

как я могу получить значение атрибута? Я думаю, что могу получить атрибут android: text с

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

но что ??? в этом случае (без styleable в attr.xml)?

2 51

2 ответа:

используйте этот:

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

Я надеюсь, у тебя есть идея

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.

см.http://developer.android.com/reference/android/R.styleable.html для получения подробной информации о доступных TypedArrays для стандартных компонентов.