Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android custom attributes not showing

I've seen a lot of posts with people wanting to know how to get custom attributes for a custom component but that is not my question. I have created a custom component and I'm trying to add attributes but when I add the namespace at the top of my xml file it only finds two random custom attributes "paddingEnd" and "paddingStart".

<resources>
    <declare-styleable name="menu_item_attrs">
        <attr name="imageId" format="integer" />
        <attr name="menuText" format="string" />
    </declare-styleable>
</resources>

This is attrs.xml file.

public MenuListItem(Context context, AttributeSet set) {
    super(context, set);

    TypedArray a = context.obtainStyledAttributes(set, R.styleable.menu_item_attrs);
    if (a == null) {
        return;
    }
    CharSequence s = a.getString(R.styleable.menu_item_attrs_menuText);
    if (s != null) {
        // do something
    }
}

This is the constructor in my custom class.

        <LinearLayout
            xmlns:custom="http://schemas.android.com/apk/res-auto"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:id="@+id/expanding_layout"
            android:background="#029eed">

            <aaron.testappanim.MenuListItem
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"/>
        </LinearLayout>

This is my component in use. I want to add values to "imageId" and "menuText" but they aren't available. The only things that show are padding related as shown below.

enter image description here

Any ideas guys?

like image 856
Murphybro2 Avatar asked Dec 15 '15 14:12

Murphybro2


1 Answers

Found the solution.

As it happens you need to have the styleable name the same as your class name.

<resources>
    <declare-styleable name="MenuListItem">
        <attr name="my_custom_attribute" format="integer" />
    </declare-styleable>
</resources>

Many many posts on this subject are wrong in that case as I can see plenty with the styles name being completely different.

Hopefully this can stop someone else falling into this trap.

Cheers

like image 77
Murphybro2 Avatar answered Nov 07 '22 11:11

Murphybro2