Graeme
Graeme

Reputation: 25864

How do you get "android:" tag values in a Custom View

There seems to be a lot of "similar" questions and answers to this scattered around which all refer to how to get a custom attribute from an AttributeSet. What I haven't been able to find so far is how to get an android: namespace tag:

    <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"/>

I would like to pull back the layout_height attribute from this custom component. Unfortunately from what I've read the closest I've got to how to do this is:

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

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

But this returns null.

Surely this isn't a rare thing to try and do?

Upvotes: 46

Views: 17357

Answers (2)

jqpubliq
jqpubliq

Reputation: 11904

The namespace should be "http://schemas.android.com/apk/res/android" android is an alias declared in your xml file

Upvotes: 66

Shardul
Shardul

Reputation: 27970

First declare required attributes in :

res\attrs.xml

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

then in your XML layout declaration use the same attribute

<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"/>

Access using

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

Upvotes: -5

Related Questions