2013-10-16 18 views
2

试图继承Widget.TextView.ListSeparator的风格,但现在AAPT doesn't允许这样做:Android的私人风格使用

没有资源发现在给定的名字相匹配 “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

我的答案复制从这个link

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

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

对于框架,只有公共资源保证只有相同的整数,构建后生成。私人资源整数的整数将从构建变为构建。

这意味着您的自定义样式引用的父母不会安装在设备上后才有效。它会引用另一个资源或根本没有引用,它不会做你想要的。

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

我发现谷歌搜索的风格是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> 

从您可以修改的利润。

+0

哦,谢谢!但是dark_header_dither也是私有的:D 也许会有一个循环链 – Sunstrike