Android custom attributes not showing

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-07 02:01:02

问题


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.

Any ideas guys?


回答1:


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




回答2:


My solution was: In the attr.xml file, you may have declared your custom attribute as follows

<declare-styleable name="IDEditText"> <attr name="customFont" format="string"/> </declare-styleable>

Here, the name field of declare-styleable must be the name of the custom view. Then it will show in the suggestions.

In mycase my custom view name is IDEditText, hence the declare-styleable name="IDEditText"



来源:https://stackoverflow.com/questions/34292345/android-custom-attributes-not-showing

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!