ActionBarSherlock mirrod属性 - 何时使用“android:”前缀?

时间:2013-01-04 09:27:29

标签: android android-actionbar actionbarsherlock android-xml android-theme

当样式化ActionBarSherlock时,我想知道何时必须使用前缀属性,何时使用非前缀属性,以及何时使用前缀属性。例如:

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

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

  

镜像属性

     

由于Android主题系统的限制,任何主题自定义都必须在两个属性中声明。正常的android-prefixed属性将主题应用于本机操作栏,而未加前缀的属性用于自定义实现。由于两个主题API完全相同,因此您只需要两次引用自定义,而不必两次实现它们。

     

最简单的方法就是通过一个例子准确地传达这一点。以下是上面提到的“Styled”示例的完整主题:

<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:backgroundbackground属性?自API级别1以来存在android:background。有人可以提供有关这些镜像属性的更多详细信息吗?

2 个答案:

答案 0 :(得分:1)

根据我对你引用的ActionBarSherlock文档的理解,当ActionBarSherlock使用ActionBar的原生版本时,使用android-prefixed属性(如果你使用“普通”ActionBar,那么你将是唯一一个设置的属性)(也就是说,在运行Android 3+的设备上,它可用),而在旧版本上使用非前缀版本,当ActionBarSherlock实际上必须使用自己的ActionBar组件实现时。

简而言之,Android原生特征使用了android-prefixed属性,自定义组件使用了非前缀版本。

无论如何,看起来你总是需要在对ActionBarSherlock对象进行设置时设置前缀和非前缀属性。

答案 1 :(得分:0)

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

例如TextButton这样的直接样式的例外并不是因为您只是直接将样式传递给TextView / Button,但我会始终继承从abs__styles.xml中定义的父/当前样式,这样你总能获得正确的间距等。