样式自定义视图

时间:2011-03-18 19:27:48

标签: android xml custom-view android-custom-view

我的Android项目中有一些自定义视图,我已将相关详细信息添加到attrs.xml文件中。现在我可以通过XML实现我的对象了。这很好。

如何设置这些元素的样式?当我尝试在styles.xml中使用我的自定义属性时,会收到错误“找不到与给定名称匹配的资源:”

在普通xml开发中使用自定义视图时,我使用xmlns:app =“http://schemas.android.com/apk/res/bla.bla.bla”。在样式中使用的正确性是什么?

这就是我的风格目前的样式

<style name="Journey_DaySelect_Sunday">
    <item name="app:onImage">@drawable/day_sunday_selected</item>
    <item name="app:offImage">@drawable/day_sunday</item>
</style>

3 个答案:

答案 0 :(得分:18)

在Google上进行了更深入的搜索后,我放弃了在其他地方找到答案,并且偶然尝试使用我生成的R文件的绝对命名空间。愿这解决你所有的问题。

使用包含您的R文件的NAMESPACE

<style name="Journey_DaySelect_Sunday" parent="Journey_DaySelect">
    <item name="AppZappy.NIRailAndBus:onImage">@drawable/day_sunday_selected</item>
    <item name="AppZappy.NIRailAndBus:offImage">@drawable/day_sunday</item>
</style>

答案 1 :(得分:2)

为了澄清,项目的name属性应该与attrs.xml的declare-styleable name属性+“:”+属性名称相同。

例如:

attrs.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>  
    <declare-styleable name="com.chuck.norris">
        <attr name="actionBarTextColor" format="color"/>
    </declare-styleable> 
</resources>

style.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="myNewStyle">
        <item name="android:textColor">#FFFF0000</item>
        <item name="com.chuck.norris:actionBarTextColor">#ffff0000</item>
    </style>
</resources>

然后,您可以使用manifest.xml文件中的主题将此样式应用于所有活动。在存在想要使用“actionBarTextColor”属性的自定义视图的任何地方,您可以使用Java代码:

TypedArray typedArray = context.obtainStyledAttributes(attrSet, R.styleable.com_chuck_norris);
COLOR_ACTION_BAR_TEXT = typedArray.getColor(R.styleable.com_chuck_norris_actionBarTextColor, 0xff0000ff);
typedArray.recycle();

我不确定为什么你不能像上面提到的那样只在style.xml文件中定义你的模式,但它似乎是style.xml的限制。

答案 2 :(得分:0)

尝试此解决方案

<style name="Journey_DaySelect_Sunday">
<item name="onImage">@drawable/day_sunday_selected</item>
<item name="offImage">@drawable/day_sunday</item>
</style>

reference(Chinese)

如果你认为它有用,我会翻译它。