设置Android背景和持久性菜单栏 – 在旧版本上使用属性会导致崩溃 – 是否有一个主题/模式的方法?

在Android 3.0中,“checked”的概念可以使用“激活”的背景渲染。 这为您提供了在点击列表片段时所看到的持久性栏,为列表的右侧提供了片段的上下文(例如,在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的新增function。 是什么让它“激活”是:

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

该属性值是Android 3.0的新增function,如果您尝试在早期版本的Android上使用它,会导致您崩溃,从我所知道的情况来看。 我想将背景设置为3.0 /大/风景组合的魔术值,否则跳过。

我可以做到这一点,有两个版本的布局,一个在-v11资源集,一个在常规资源集。 不过,这比我想要的要less一点DRY,因为大部分布局是相同的,只有这一个属性被包含或被跳过。

我试图使用可绘制的资源别名,所以android:background可以引用别名和别名将处理-v11区分,但<bitmap> drawables似乎不喜欢android:src="@null"

我怀疑这个问题有一个风格和主题的方法,但是由于我从来没有完全把自己的头围绕在那些(我更加尴尬的Android知识缺口之一)上,所以我并不完全知道该怎么做。

有没有人制定了3.0版本的“激活”模式,并跳过3.0之前,超出单独的布局?

谢谢!

样式是你的朋友….

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

每个值目录都包含一个styles.xml,区别在于其中包含的默认值。

 <style name="listViewActivatedStyle"/> 

值-v11包含;

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

那么你可以有一个单一的布局使用;

 style="@style/listViewActivatedStyle" 

并select适当的一个。