【问题标题】:Android private styles usingAndroid私有样式使用
【发布时间】:2013-10-24 07:23:04
【问题描述】:

试图继承 Widget.TextView.ListSeparator 风格,但现在 aapt 不允许这样做:

找不到与给定名称匹配的资源 'Widget.TextView.ListSeparator

因为谷歌将其设为私有。但是如何结合两种样式:ListSeparator 和边距?

样式 1

<style name="settings_plain_text">
<item name="android:layout_marginTop"> 10sp </item>
<item name="android:layout_marginBottom"> 10sp </item>
<item name="android:textSize"> 18sp </item>

风格2

style="?android:attr/listSeparatorTextViewStyle"

【问题讨论】:

    标签: android xml styles


    【解决方案1】:

    我从这个link复制答案:

    大家好。我与负责 aapt 的框架团队进行了一些调查。 发生的事情是某些样式,例如 WindowTitle 不是公开的(您不会在 android.R.style 中找到它们)。您不应该扩展非公共资源。 aapt 曾经让你这样做,但这是一个在 platform-tools r6 中修复的错误。

    问题是一旦编译,资源被分配一个整数。在这种情况下,您的自定义样式被分配一个整数,并且其父级通过父级整数引用。

    对于框架,只有公共资源保证只有相同的整数,构建后构建。私有资源整数的整数会因构建而异。

    这意味着您的自定义样式引用了一个父级,一旦安装在设备上,将无效。它会引用其他资源或根本不引用其他资源,它不会做你想做的事。

    如果您希望重用私有样式,则应将该样式的内容复制到您自己的内容中,而不是对其进行扩展。

    我在谷歌上找到的风格是that one

    <style name="Widget.TextView.ListSeparator">
        <item name="android:background">@android:drawable/dark_header_dither</item>
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:textStyle">bold</item>
        <item name="android:textColor">?textColorSecondary</item>
        <item name="android:textSize">14sp</item>
        <item name="android:gravity">center_vertical</item>
        <item name="android:paddingStart">8dip</item>
    </style>
    

    从中您可以修改边距。

    【讨论】:

    • 哦,谢谢!但是 dark_header_dither 也是私有的 :D 或许会有无尽的链条
    猜你喜欢
    • 2021-06-30
    • 2015-04-01
    • 2011-12-27
    • 2019-08-26
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多