创建从应用程序主题中设置的默认样式扩展的样式

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

我在应用程序主题中设置了默认按钮样式,以便它应用于应用程序中的每个按钮。 除了默认样式之外,还有一些按钮需要将其文本大写。所以我想要做的就是这样 (下面的代码片段无法正常工作,因为我无法设置parent="?attr/materialButtonStyle"):

<style name="capitalizedButton" parent="?attr/materialButtonStyle">
    <item name="android:textAllCaps">true</item>
</style>

是否可以扩展theme.xml中定义的样式?我不想引用我在主题中设置的本地样式,因为稍后可以更改,而我打算使用theme属性访问它。

提问于
用户回答回答于

如果除了自定义默认按钮样式之外还发生大写,则不需要将大小写样式设置为子项?attr/materialButtonStyle(无论如何都不能这样做,因为?attr引用当前应用主题中的属性)。你可以在这里阅读更多相关信息。

styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="buttonStyle">@style/DefaultButton</item>
</style>

<style name="DefaultButton" parent="Widget.AppCompat.Button">
    <item name="android:textColor">@color/white</item>
</style>

<style name="AllCapsButton">
    <item name="android:textAllCaps">true</item>
</style>

layout.xml

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button"
    android:theme="@style/AllCapsButton"/>

在上面的代码中,button获取DefaultButton主题应用的样式(白色文本)以及AllCapsButton布局文件中应用的样式(大写文本)。

用户回答回答于

您可以直接将样式传递给ButtonXML中的小部件,如:

<Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="capitalizedButton"/>

希望你能得到答案。如果没有,请解释你的问题。

扫码关注云+社区

领取腾讯云代金券