Как получить значения тега "android:" в пользовательском представлении - PullRequest
42 голосов
/ 24 октября 2011

Похоже, что на этот вопрос разбросано много "похожих" вопросов и ответов, все из которых касаются того, как получить пользовательский атрибут из AttributeSet. Пока я не смог найти, как получить тег android: namespace:

    <com.custom.view.StatusThumbnail
        android:id="@+id/statusThumbnailContainer"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:layout_weight="1"/>

Я бы хотел извлечь атрибут layout_height из этого пользовательского компонента. К сожалению, из того, что я прочитал, ближе всего к тому, как это сделать:

public StatusThumbnail(Context context, AttributeSet attrs) {
    super(context, attrs);

    String height = attrs.getAttributeValue("android", "layout_height");

Но это возвращает null.

Конечно, это не редкость, что можно попробовать?

Ответы [ 2 ]

60 голосов
/ 24 октября 2011

Пространство имен должно быть "http://schemas.android.com/apk/res/android", android - это псевдоним, объявленный в вашем XML-файле

0 голосов
/ 24 октября 2011

Сначала объявите обязательные атрибуты в:

res \ attrs.xml

    <declare-styleable name="StatusThumbnail">
        <attr name="statusThumbnailattr" format="string"/>
    </declare-styleable>

, затем в объявлении макета XML используйте тот же атрибут

<com.custom.view.StatusThumbnail
        android:id="@+id/statusThumbnailContainer"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        statusThumbnailattr="some value"
        android:layout_weight="1"/>

Доступ с использованием

public StatusThumbnail(Context context, AttributeSet attrs) {
    super(context, attrs);
TypedArray a=context.obtainStyledAttributes(attrs,R.styleable.StatusThumbnail);
this.mdColorDialogTitle=a.getString(R.styleable.StatusThumbnail_statusThumbnailattr);
}
...