任何有关如何提供自己的自定义状态以供在可绘制状态列表选择器中使用的信息的搜索都很少,但几乎所有这些(此处和其他地方)都引用此google groups post。
我有这样的傻瓜和二传手:(不包括在上面的帖子中,但使用他们的措辞来保持简单)
public void setFried(boolean fried){
if(mFried != fried){
mFried = fried;
refreshDrawableState();
}
}
public void isFried(){
return mFried;
}
我一直试图让它在过去几个小时内工作,似乎没有任何工作。它只是不会改变外观。我看了调用onCreateDrawableState()时发生了什么,我看到在更改自定义状态后getDrawableState()会发生什么。自定义状态值实际上出现在drawableState数组中。
因为我可以看到状态实际上被合并到数组中,并且因为它似乎完全忽略了选择器中的任何自定义状态,所以我认为xml必定是错误的。
以下是帖子的建议:
<selector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/my.app.package">
<item android:drawable="@drawable/item_baked" state_baked="true"
state_fried="false" />
<item android:drawable="@drawable/item_fried" state_baked="false"
state_fried="true" />
<item android:drawable="@drawable/item_overcooked" state_baked="true"
state_fried="true" />
<item android:drawable="@drawable/item_raw" state_baked="false"
state_fried="false" />
</selector>
你真的可以写state_fried和state_baked,还是需要像app:state_fried这样的前缀?如果我尝试添加前缀,我会收到如下控制台错误:No resource identifier found for attribute 'state_fried' in package my.app.package
有没有人真正有自定义状态工作?引用的帖子是否需要让它工作或者它有什么问题或丢失?
我不知道它是否有任何区别,但我使用的是Android库项目,而选择器和attr.xml都在Library项目中。
由于
更新 看起来问题是Library Projects不能很好地使用自定义属性。请参阅here,here,here。
遗憾的是,还没有看到很多变通方法......
答案 0 :(得分:2)
我写了那个原始问题。 IIRC,那时Android处于测试阶段,事情发生了一些变化。自定义属性确实有用;我用它们。确实需要自定义状态属性的app:
前缀。您还需要在xmlns声明中替换应用程序包以代替my.app.package
。
答案 1 :(得分:1)
使用
xmlns:app="http://schemas.android.com/apk/lib/my.app.package
表示库中声明的属性。