【问题标题】:ActionBarSherlock mirrod attributes -- when to use "android:" prefix?ActionBarSherlock mirrod 属性——何时使用“android:”前缀?
【发布时间】:2013-01-04 09:27:29
【问题描述】:

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

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

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

镜像属性

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

【问题讨论】:

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


    【解决方案1】:

    根据我对您引用的 ActionBarSherlock 文档的了解,当 ActionBarSherlock 使用本机版本的 ActionBar 时,将使用 android-prefixed 属性(如果您使用“普通”ActionBar,您将是唯一设置的属性)(也就是说,在运行 Android 3+ 的设备上可用),并且在旧版本上使用无前缀版本,此时 ActionBarSherlock 实际上必须使用其自己的 ActionBar 组件实现。

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多