Android自定义属性未显示

时间:2015-12-15 14:55:33

标签: android attributes components

我看过很多帖子,人们想知道如何获取自定义组件的自定义属性,但这不是我的问题。我创建了一个自定义组件,我正在尝试添加属性,但是当我在xml文件的顶部添加命名空间时,它只找到两个随机的自定义属性“paddingEnd”和“paddingStart”。

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

这是attrs.xml文件。

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

这是我的自定义类中的构造函数。

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

这是我正在使用的组件。我想为“imageId”和“menuText”添加值,但它们不可用。显示的唯一内容是填充相关,如下所示。

enter image description here

任何想法的人?

3 个答案:

答案 0 :(得分:16)

找到了解决方案。

碰巧你需要使用与你的班级名称相同的可设置名称。

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

在这种情况下,很多帖子都是错误的,因为我可以看到很多样式名称完全不同。

希望这可以阻止其他人陷入这个陷阱。

干杯

答案 1 :(得分:0)

虽然这篇文章有点旧,只是为了提供信息,我将分享我的案例。

我定义了一个名为 ABCcBAaB c ABbBb BAa AB a A B A Aa B A BB Aaaa A B bBAABB AAa AB AAA BBBA B BbBBBABb b a aaa A Bb BbAAAaa B AAABAB ABb b ABB AABbb a A BBb AAA AB AaaaBbb aa BAaABBBB A AB AAaaaBb BAAB B bA BbBA AaAAa AAA bbAAAA B bBAAa B AaaA a b 的自定义属性文件以用于 MaterialCardView:

attrs.xml

我使用拖动 attr 来更改带有此选择器的 cardview 的笔触颜色:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="DeviceMaterialCardView">
        <attr name="state_none" format="boolean"/>
        <attr name="state_favorite" format="boolean"/>
        <attr name="state_dragging" format="boolean"/>
    </declare-styleable>
</resources>

最后我有了名为 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:himtec="http://schemas.android.com/apk/res-auto"> <item android:color="?attr/colorSecondary" himtec:durum_surukle="true"/> <item android:color="?attr/colorSecondary" android:state_activated="true"/> <item android:alpha="0.2" android:color="?attr/colorOnBackground"/> </selector> 的自定义类。现在自定义属性与自定义类同名。但是我在编译 DeviceMaterialCardView xml 文件时遇到编译错误:

<块引用>

/home/Projeler/PK-BLE-RF/Android/Uygulama/PK0101BLE/app/src/main/res/color/him_stroke_color.xml:6: AAPT: 错误: 属性 com.himtec.himtec_kontrol:state_dragging not found .

我仍然被困住了,不知道如何解决这个问题。

答案 2 :(得分:-1)

我的解决方案是: 在attr.xml文件中,您可能已声明了自定义属性,如下所示

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

此处,declare-styleable的名称字段必须是自定义视图的名称。然后它将显示在建议中。

在mycase中,我的自定义视图名称为IDEditText,因此declare-styleable name =“IDEditText”