Android私密样式使用

时间:2013-10-16 08:55:18

标签: android xml styles

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

  

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

因为谷歌将其设为私有。但是我如何组合两种样式:ListSeparator和margin?

风格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 个答案:

答案 0 :(得分:6)

我复制了link的答案:

  

大家好。我做了一些调查负责aapt的框架团队。   发生的事情是一些样式,如WindowTitle不公开(你不会在android.R.style中找到它们)。您不应该扩展非公共资源。 aapt曾经让你这样做,但这是一个在平台工具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>

由此您可以修改边距。