安卓私有样式使用

3

尝试继承 Widget.TextView.ListSeparator 样式,但是现在 aapt 不允许这样做:

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

因为谷歌已将其变成了私有资源。但是我该如何结合两个样式:ListSeparator 和 margins?

样式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"
1个回答

6

我从这个链接中复制了答案:

大家好。我与负责aapt的框架团队进行了一些调查。

发生的情况是,一些样式(如WindowTitle)不是公共的(您在android.R.style中找不到它们)。您不应该扩展非公共资源。aapt曾经允许您这样做,但这是一个错误,已在platform-tools r6中修复。

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

对于框架而言,只有公共资源才保证每次构建后具有相同的整数。私有资源整数的整数将从构建到构建不同。

这意味着您的自定义样式正在引用一个父项,在设备上安装后将无效。它将引用另一个资源或根本不引用任何资源,并且它不会做您想要的事情。

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

我在Google上找到的样式是这个

<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 或许会有一个无尽的链。 - Sunstrike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接