76

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

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

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

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

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

谢谢!

4

1 回答 1

57

风格是你的朋友....

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

每个 values 目录都包含一个 styles.xml,不同之处在于其中包含一个默认值;

<style name="listViewActivatedStyle"/>

values-v11 包含;

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

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

style="@style/listViewActivatedStyle"

并选择合适的一个。

于 2011-03-11T18:07:09.020 回答