设置Android背景&持久性菜单栏 - 在旧版本上使用属性会导致崩溃 - 是否存在主题/模式方法?

时间:2011-03-11 15:39:39

标签: android android-support-library

在Android 3.0中,“已检查”的概念可以使用“激活”背景进行渲染。这为您提供了在点击列表片段时看到的持久性栏,为列表右侧提供片段的上下文(例如,点击Gmail中的文件夹突出显示该文件夹并打开另一个列表片段以显示该文件夹中的对话)。

例如,片段样本显示的内容如下:

setListAdapter(new ArrayAdapter<String>(getActivity(),
                    android.R.layout.simple_list_item_activated_1, Shakespeare.TITLES));

该资源(android.R.layout.simple_list_item_activated_1)是Android 3.0的新功能。它被“激活”的原因是:

android:background="?android:attr/activatedBackgroundIndicator"

该属性值是Android 3.0的新功能,如果您尝试在早期版本的Android上使用它,将导致您崩溃,据我所知。我想将背景设置为3.0 /大/横向组合的魔术值,否则跳过它。

我可以通过布局的两个单独版本来实现这一点,一个在-v11资源集中,一个在常规资源集中。但是,这比我想要的要少一些,因为大部分布局是相同的,只有这一个属性被包含或被跳过。

我尝试使用drawable资源别名,因此android:background可以引用别名,别名会处理-v11区分,但<bitmap> drawables不会似乎喜欢android:src="@null"

我怀疑这个问题有样式和主题的方法,但由于我从来没有完全包围那些(我更尴尬的Android知识差距之一),我不完全确定该怎么做。

有没有人制定过在3.0上使用“激活”并在3.0之前跳过它的模式,超出了单独的布局?

谢谢!

1 个答案:

答案 0 :(得分:57)

样式是你的朋友......

有两个值目录,一个是值-v11,另一个是默认值。

每个values目录包含一个styles.xml,区别在于它包含的默认值;

<style name="listViewActivatedStyle"/>

值-v11包含;

<style name="listViewActivatedStyle">
   <item name="android:background">?android:attr/activatedBackgroundIndicator</item>
</style>

然后你可以使用单一的布局;

style="@style/listViewActivatedStyle"

并选择适当的一个。