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

在 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/large/scape 组合的这个神奇值,否则跳过它。

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

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

我怀疑有一个风格和主题的方法来解决这个问题,但是因为我从来没有完全理解过这些(我的 Android 知识空白之一) ,我不完全确定该怎么做。

有没有人想出一个模式,在3.0版本中使用“激活”,而在3.0版本之前跳过它,超越单独的布局?

谢谢!

8819 次浏览

Styles are your friend....

Have two values directories, one is values-v11, the other the default values.

Each values directory contains a styles.xml, the difference being that the default values one contains;

<style name="listViewActivatedStyle"/>

The values-v11 contains;

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

Then you can have a single layout which uses;

style="@style/listViewActivatedStyle"

and the appropriate one is selected.