45

似乎有很多“类似”的问题和答案分散在这些问题和答案中,它们都指的是如何从AttributeSet. 到目前为止我还没有找到的是如何获取android:命名空间标签:

    <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

当然,这不是一件罕见的事情吗?

4

2 回答 2

66

命名空间应为“ http://schemas.android.com/apk/res/android” android 是在您的 xml 文件中声明的别名

于 2011-10-24T14:53:57.427 回答
-4

首先声明所需的属性:

资源\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);
}
于 2011-10-24T15:02:35.150 回答