即使我的应用程序中包含android支持v7
加
android:background="?android:attr/selectableItemBackground"
使我的IDE Eclipse抛出一个错误(阻止我进行编译),通知我selectableItemBackground仅适用于最小Api 11及更高版本。
如何将此属性添加到XML的背景中?
假定从高级库复制和粘贴不是解决方案
Answers:
由于属性是在库中定义的(支持v7),因此您可以将其用作用户定义的属性:即不带android:
前缀:
android:background="?attr/selectableItemBackground"
您看到的错误指出了?android:attr/selectableItemBackground
API版本> = 11可用的错误。的确如此。
selectableItemBackground
是通过查看android.support.v7.appcompat.R.attr在v7中定义的。关于第二个问题,您是否在询问用户定义属性的工作方式?
android:
命名空间前缀访问Android系统提供的任何内容。这不包括支持库,因为它们是附加组件。属性attrs.xml
在themes.xml
和/或中定义,并在中设置styles.xml
。因此,如果要将自己的drawable分配给selectableItemBackground
,则不会使用android:
名称空间。但是,如果可绘制对象是由Android系统提供的,那么您会的。
这是selectedItemBackground。您可以在/platforms/android-14/data/res/themes.xml中找到它
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:exitFadeDuration="@android:integer/config_mediumAnimTime">
<item android:state_window_focused="false" android:drawable="@color/transparent" />
<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
<item android:state_focused="true" android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/list_selector_background_disabled" />
<item android:state_focused="true" android:state_enabled="false" android:drawable="@drawable/list_selector_background_disabled" />
<item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/list_selector_background_transition" />
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/list_selector_background_transition" />
<item android:state_focused="true" android:drawable="@drawable/list_selector_background_focused" />
<item android:drawable="@color/transparent" />
</selector>
您可以在Android SDK目录中找到可绘制对象
../platforms/android-14/data
res
文件夹中。
不是该主题的专家,但似乎您需要基于平台版本的主题。该官方指南解释了这个过程非常好,我认为。
您必须为每个版本创建不同的XML文件并将其保存在中res/values-v7
,res/values-v11
等等。然后将这些样式用于您的视图。像这样:
在res/values-v7
:
<style name="LightThemeSelector" parent="android:Theme.Light">
...
</style>
在res/values-v11
:
<style name="LightThemeSelector" parent="android:Theme.Holo.Light">
<item name="selectableItemBackground">?android:attr/selectableItemBackground</item>
...
</style>
然后使用样式作为视图:
<TextView
style="@style/LightThemeSelector"
android:text="@string/hello" />
希望这可以帮助。干杯。
<style name="LightThemeSelector" parent="android:Theme.Holo.Light"> <item name="android:background">?android:attr/selectableItemBackground</item> ... </style>