android:attr风格如何工作?

Hou*_*ell 8 android

我正在尝试通过布局构建Android UI.我从以下开始:

<TextView
    android:id="@+id/..."
    android:layout_marginTop="8dip"
    android:text="..."
    style="?android:attr/listSeparatorTextViewStyle"/>
Run Code Online (Sandbox Code Playgroud)

这看起来不错(所有大写字母,较小的字体,下面的分隔栏).现在我想扩展样式,所以我将其更改为以下内容:

<TextView
    android:id="@+id/..."
    android:layout_marginTop="8dip"
    android:text="..."
    style="@style/section_title"/>
Run Code Online (Sandbox Code Playgroud)

具有以下风格:

<style name="section_title" parent="@android:attr/listSeparatorTextViewStyle">
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
</style>
Run Code Online (Sandbox Code Playgroud)

这不起作用(字体是正确的,但分隔线已经消失).

怎么样......那?

Luk*_*rog 23

当你使用时:

style="?android:attr/listSeparatorTextViewStyle"
Run Code Online (Sandbox Code Playgroud)

你正在使用这个属性(listSeparatorTextViewStyle)指向的样式.如果您查看平台,themes.xml您将看到实际用于此属性的样式Widget.TextView.ListSeparator.White.所以这是style您应该扩展自定义样式.

不幸的是,这种风格是私密的,你不能扩展它,或者你不应该扩展它(作为参考,请参阅谷歌的这个错误报告).您最好的选择是复制整个样式Widget.TextView.ListSeparator.White(Widget.TextView.ListSeparator不是公共的,所以也必须复制它),在您的自定义样式中使用它而不是从android平台扩展样式(请参阅链接的响应)以上).