1

在设置 ActionBarSherlock 样式时,我想知道何时必须使用前缀属性,何时使用非前缀属性,以及何时使用两者。例如:

<item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
<item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>

我在ActionBarSherlock 网站上找到了这个解释:

镜像属性

由于 Android 主题系统的限制,任何主题自定义都必须在两个属性中声明。普通的 android-prefixed 属性将主题应用于本机操作栏,unprefixed 属性用于自定义实现。由于两个主题 API 完全相同,您只需引用您的自定义两次,而不必实施两次。

准确传达这意味着什么的最简单方法是举个例子。以下是上述“样式化”示例的完整主题:

<style name="Theme.Styled" parent="Theme.Sherlock.Light.DarkActionBar">
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
    <item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
</style>

<style name="Widget.Styled.ActionBar" parent="Widget.Sherlock.Light.ActionBar.Solid.Inverse">
    <item name="background">@drawable/bg_striped</item>
    <item name="android:background">@drawable/bg_striped</item>

    <item name="backgroundSplit">@drawable/bg_striped_split</item>
    <item name="android:backgroundSplit">@drawable/bg_striped_split</item>
</style>

我想,非前缀属性只能用于属性,在 API 级别 11 之前不存在。但是为什么示例android:background中还有一个background属性?android:background自 API 级别 1 起就存在。有人可以提供有关这些镜像属性的更多详细信息吗?

4

2 回答 2

1

根据我对您引用的 ActionBarSherlock 文档的了解,当 ActionBarSherlock 使用 ActionBar 的本机版本(即,在运行 Android 3+ 的设备上可用),并且在旧版本上使用无前缀版本,此时 ActionBarSherlock 实际上必须使用其自己的 ActionBar 组件实现。

简而言之,android-prefixed 属性用于 Android 原生功能,非前缀版本用于自定义组件。

无论如何,在为 ActionBarSherlock 对象设置主题时,您似乎总是必须同时设置前缀和非前缀属性。

于 2013-01-04T09:40:10.297 回答
0

简单规则是您继承的任何地方,parent="Widget.Sherlock.etc"那么您应该具有双重属性。

例外是直接样式喜欢TextButton不喜欢,因为你只是将你的样式直接传递给那个TextView/ Button,但是我总是从 abs__styles.xml 中定义的父/当前样式继承,这样你总是会得到正确的间距等..

于 2013-01-04T09:33:53.023 回答