首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >styles.xml中的自定义属性

styles.xml中的自定义属性
EN

Stack Overflow用户
提问于 2011-07-28 22:44:14
回答 2查看 72K关注 0票数 186

我已经创建了一个自定义小部件,并在layout.xml中声明它。我还在attr.xml中添加了一些自定义属性。但是,当尝试在styles.xml中的样式中声明这些属性时,我得到的是No resource found that matches the given name: attr 'custom:attribute'.

我已经将xmlns:custom="http://schemas.android.com/apk/res/com.my.package"放到了styles.xml中的所有标记中,包括<?xml><resources><style>,但是它仍然给我同样的错误,即它找不到我定制的XML名称空间。

但是,我可以使用我的名称空间为layout.xml中的视图手动分配属性,因此名称空间没有任何问题。我的问题在于让styles.xml知道我的attr.xml。

EN

回答 2

Stack Overflow用户

发布于 2013-10-31 00:15:01

斯泰勒和文斯的修改对我很有效。我想指出的是,“文斯”的解释可能并不完全准确。

为了测试这样一个假设,即与自定义视图类的名称相匹配的declare-styleable的名称属性允许我们在没有命名空间的情况下访问自定义属性,我更改了declare-styleable的名称(自定义视图被命名为TestViewFont

<declare-styleable name="TextViewFont2">
    <attr name="font" format="integer"/>
</declare-styleable>

然后,我在自定义视图中更改了obtainStyledAttributes调用,以反映这一点:

TypedArray ta = context.getTheme().obtainStyledAttributes(attrs, R.styleable.TextViewFont2, 0, 0);

代码仍然在运行。因此,我不认为这是由它命名的类的declare-styleable进行的某种自省。

因此,我相信任何自定义属性都可以用于声明样式,而无需引用名称空间。

不管怎样,感谢大家的帮助,它解决了我的问题。

票数 10
EN

Stack Overflow用户

发布于 2014-12-13 10:52:09

为了防止它对其他人有帮助,我的错误是我的自定义视图类调用了AttributeSet.getAttributeValue

String fontName = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto", "customFont");

...which导致我的自定义属性不能被读入我的自定义视图。

修复方法是在我的自定义视图中使用obtainStyledAttributes

 TypedArray styleAttrs = context.obtainStyledAttributes(attrs, R.styleable.MyTextViewStyleable);
 String fontName = styleAttrs.getString(R.styleable.MyTextViewStyleable_customFont);

这一功能正常工作的一个提示是,您可以在按住Ctrl/Apple键的同时单击R.styleable.MyTextViewStyleable_customFont,直接转到您的attrs.xml定义。

我花了一段时间才发现我的代码与其他示例之间的关键区别,因为当直接通过布局XML (而不是通过样式)传递自定义属性时,它工作得很好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6860886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档