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