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

Com*_*are 74 android android-support-library

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

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

setListAdapter(new ArrayAdapter<String>(getActivity(),
                    android.R.layout.simple_list_item_activated_1, Shakespeare.TITLES));
Run Code Online (Sandbox Code Playgroud)

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

android:background="?android:attr/activatedBackgroundIndicator"
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

谢谢!

Al *_*ton 57

风格是你的朋友....

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

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

<style name="listViewActivatedStyle"/>
Run Code Online (Sandbox Code Playgroud)

值-v11包含;

<style name="listViewActivatedStyle">
   <item name="android:background">?android:attr/activatedBackgroundIndicator</item>
</style>
Run Code Online (Sandbox Code Playgroud)

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

style="@style/listViewActivatedStyle"
Run Code Online (Sandbox Code Playgroud)

并选择适当的一个.

  • 乐意效劳.你的书已经挖出​​了我足够的知识漏洞,我很高兴能够回馈一些东西. (25认同)
  • 这似乎有效.当然,现在我需要了解足够多的样式和总体来写一章,所以我可以更好地解释如何在书中使用这种方法.我是*所以*不期待那样.:-(但是,谢谢你的帮助! (9认同)