3

试图继承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"
4

1 回答 1

6

我从这个链接复制答案:

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

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

对于框架,只有公共资源才能保证只有相同的整数,构建后构建。私有资源整数的整数会随着构建的变化而变化。

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

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

我发现谷歌搜索的风格

<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>

从中您可以修改边距。

于 2013-10-16T09:42:47.583 回答