其他分享
首页 > 其他分享> > android – 覆盖不起作用的按钮的文本颜色

android – 覆盖不起作用的按钮的文本颜色

作者:互联网

我使用按钮上的buttonBarStyle和布局上的buttonBarButtonStyle为按钮栏创建了一个自定义主题.
它工作正常,但我想更改按钮的文本颜色,但它仍然采用默认颜色(@android:color / primary_text_holo_light)
我的代码是:

<style name="ButtonBarTheme" parent="AppTheme">
        <item name="buttonBarStyle">?android:attr/buttonBarStyle</item>
        <item name="buttonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
        <item name="android:textColor">#ffffff</item>
</style>

而对于布局:

<LinearLayout 
    style="?android:attr/buttonBarStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#0090cc"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/bar_button1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        style="@style/ButtonBarStyleButton"
        android:text="Button 1" />

    <Button
        android:id="@+id/bar_button2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        style="?android:attr/buttonBarButtonStyle"
        android:text="Button 2" />

</LinearLayout>

AppTheme有父AppBaseTheme,它有父android:Theme.Holo.Light.DarkActionBar.

我该怎么做才能更改按钮的文字颜色?

编辑:
我尝试在每个元素上应用颜色并且它可以工作,但我想通过覆盖样式文件中的颜色来更改它(将所有设计属性保存在一个地方,类似于CSS).

另外,我试图创建一个具有?android:attr / buttonBarStyle“属性的样式”

   <style name="ButtonBarStyleButtonBase">
        <item name="buttonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
    </style>

   <style name="ButtonBarStyleButton" parent="ButtonBarStyleButtonBase">
        <item name="android:textColor">#ffFFff</item>
    </style>

但它表现得很奇怪:颜色已更新,但父样式中没有可见的属性.

解决方法:

我想在这个答案前言,说我不完全理解按钮栏是什么.除了为它们定义一些样式属性之外,android开发者文档似乎没有提及它们,因此我不确定它们如何映射到实际的视图/窗口小部件.

我相信正在发生的事情是你错过了Style和Theme之间的区别.样式应用于视图以定义其属性.主题应用于整个应用程序或单个活动,并提供为应用主题的应用程序/活动中显示的视图定义默认样式的功能(以及其他内容).

但更重要的是,buttonBarStyle和buttonBarButtonStyle等属性将仅由Activity用于解析按钮栏中按钮栏和按钮的默认样式.由于这些属性仅由Activity解析,因此如果直接应用于您的视图,它们将被忽略.

因此,如果要使用主题来应用样式,则需要创建一个新的样式定义,该定义扩展所需的基本样式,然后将该自定义样式分配回主题定义中的相应“视图样式”属性.

<style name="CustomButtonStyle" parent="@android:attr/buttonStyle">
        <item name="android:textColor">#ffffff</item>
</style>


<style name="AppTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar">
        <item name="buttonStyle">@style/CustomButtonStyle</item>
</style>


<application
    ...
    android:theme="@style/AppTheme" >

现在,所有没有显式样式属性的按钮都将显示为白色文本.

但是,对于想要显示带有ButtonBar样式的按钮的特殊情况,您应该注意ButtonBar样式不会自动应用于您的按钮.您必须手动定义要与该样式一起显示的按钮.因此,上面的示例现在看起来更像是这样的:

<style name="CustomButtonBarStyle" parent="@android:attr/buttonBarStyle">
        <item name="android:textColor">#ffffff</item>
</style>


<style name="AppTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar">
        <item name="buttonBarStyle">@style/CustomButtonBarStyle</item>
</style>


<application
    ...
    android:theme="@style/AppTheme" >

现在应用您为当前主题定义的ButtonBar样式:

<Button
        ...
        style="?android:attr/buttonBarStyle"/>

请注意,这将应用为当前主题定义的ButtonBar样式(除非它被Activity覆盖,否则它将在整个应用程序中相同).另请注意,由于您正在引用为当前主题定义的样式,因此它允许您根据所需的资源限定符以不同方式定义当前主题,而无需更改布局代码.

标签:android,colors,android-button,android-theme,textcolor
来源: https://codeday.me/bug/20190624/1280227.html