Подтвердить что ты не робот

Как использовать стандартный атрибут 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,  ???);

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

4b9b3361

Ответ 1

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

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

Надеюсь, у вас есть идея

Ответ 2

ИЗМЕНИТЬ

Другой способ сделать это (с указанием декларативного стиля, но не для объявления пользовательского пространства имен) выглядит следующим образом:

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 для извлечения стандартных атрибутов из пользовательских представлений.

В API Android они используют внутренний класс 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 для стандартных компонентов.