如何将TextView文本颜色设置为特定的主题颜色 [英] How to set TextView text color to specific Theme color
问题描述
我尝试学习Android主题,并遇到了将TextView
TextColor设置为另一种颜色然后出现这种全局性的麻烦:
I try to learn Android Themes and got into trouble setting a TextView
TextColor to another color then this global:
<item name="android:textColor">@color/white</item>
我创建了这个:
<item name="chatBubbleTextColor">@color/material_bohemia_500</item>
,以为我可以在TextView xml中使用它
and thought I could use it in the TextView xml like
android:textColor="?attr/chatBubbleTextColor"
但是我无法使其正常工作,也许它不能那样工作?
我知道我可以这样:
but i cannot get it to work maybe it does not work like that?
I know I can do like this:
<style name="BohemiachatBubbleTextColor" parent="android:Theme">
<item name="android:textColor">@color/material_bohemia_500</item>
</style>
但是我真的必须这样做吗?我只想创建一个color属性,而不创建一种新样式
But do I really have to do like this? I only want to create a color attribute not creating a new style
这里是主题,它是两个主题,而chatBubbleTextColor
两者都不同
Here is the Theme, it´s two Themes and the chatBubbleTextColor
is different for both
Bohemia应用程序主题和红色应用程序主题
Bohemia App Theme and Red App Theme
<!-- Base Theme -->
<style name="BaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Attributes for all APIs -->
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="dialogTheme">@style/AppTheme.Dialog</item>
<item name="alertDialogTheme">@style/AppTheme.Dialog.Alert</item>
<item name="colorControlHighlight">@color/selector_black_pressed</item>
<!-- Theme for the Preferences -->
<item name="preferenceTheme">@style/AppPreferenceTheme</item>
<!-- Theme for the pacv_placesAutoCompleteTextV -->
<item name="pacv_placesAutoCompleteTextViewStyle">@style/Widget.AppCompat.EditText</item>
<!-- Default App Theme -->
<style name="AppTheme" parent="BaseTheme">
<!-- API specific attributes 14+ -->
<item name="selectableRectDrawable">@drawable/state_list_selectable_rect_black</item>
<item name="selectableRectDrawableInverse">@drawable/state_list_selectable_rect_white</item>
<item name="selectableRectDrawableColored">@drawable/state_list_selectable_rect_black</item>
<item name="selectableRoundedRectDrawable">@drawable/state_list_selectable_rounded_rect_black</item>
<item name="selectableRoundedRectDrawableInverse">@drawable/state_list_selectable_rounded_rect_white</item>
<item name="selectableRoundedRectDrawableColored">@drawable/state_list_selectable_rounded_rect_black</item>
</style>
<!-- Bohemia App Theme -->
<style name="BaseTheme.Bohemia" parent="AppTheme">
<!-- Attributes for all APIs -->
<item name="colorPrimary">@color/material_bohemia_400</item>
<item name="colorPrimaryDark">@color/material_bohemia_500</item>
<item name="colorAccent">@color/material_bohemia_a100</item>
<item name="dialogTheme">@style/AppTheme.Dialog.Bohemia</item>
<item name="alertDialogTheme">@style/AppTheme.Dialog.Alert.Bohemia</item>
<item name="android:windowBackground">@color/material_bohemia_600</item>
<!-- Sets the color of the control when it is not activated like an unchecked checkbox. -->
<item name="colorControlNormal">@color/material_bohemia_a200</item>
<!-- Chat bubble -->
<item name="chatBubbleTextColor">@color/material_bohemia_500</item>
</style>
<style name="AppTheme.Bohemia" parent="BaseTheme.Bohemia">
<!-- API specific attributes 14+ -->
<item name="selectableRectDrawableColored">@drawable/state_list_selectable_rect_bohemia</item>
<item name="selectableRoundedRectDrawableColored">@drawable/state_list_selectable_rounded_rect_bohemia</item>
<!-- Add your custom overall styles here -->
</style>
<!-- Red App Theme -->
<style name="BaseTheme.Red" parent="AppTheme">
<!-- Attributes for all APIs -->
<item name="colorPrimary">@color/material_red_500</item>
<item name="colorPrimaryDark">@color/material_red_700</item>
<item name="colorAccent">@color/material_red_a700</item>
<item name="dialogTheme">@style/AppTheme.Dialog.Red</item>
<item name="alertDialogTheme">@style/AppTheme.Dialog.Alert.Red</item>
<item name="android:windowBackground">@color/material_red_300</item>
<!-- Chat bubble -->
<item name="chatBubbleTextColor">@color/material_red_500</item>
</style>
<style name="AppTheme.Red" parent="BaseTheme.Red">
<!-- API specific attributes 14+ -->
<item name="selectableRectDrawableColored">@drawable/state_list_selectable_rect_red</item>
<item name="selectableRoundedRectDrawableColored">@drawable/state_list_selectable_rounded_rect_red</item>
<!-- Add your custom overall styles here -->
</style>
推荐答案
I found the answer to my own question here.
基本上是这样的:
在文件attr.xml
中,我对此进行了定义:
In the file attr.xml
I define this:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="ChatBubbleBackGroundColor" format="reference|color" />
<attr name="ChatBubbleTextColor" format="reference|color" />
</resources>
接下来,我将添加到我的两个BaseTheme
中:
Next I add to my two BaseTheme
s:
<style name="BaseTheme.Red" parent="AppTheme">
<item name="ChatBubbleBackGroundColor">@color/material_red_a200</item>
<item name="ChatBubbleTextColor">@color/material_red_a700</item>
</style>
<style name="BaseTheme.Orange" parent="AppTheme">
<item name="ChatBubbleBackGroundColor">@color/material_orange_a200</item>
<item name="ChatBubbleTextColor">@color/material_orange_a700</item>
</style>
最后是我的布局:
<TextView
android:id="@+id/quoteTitle"
android:textColor="?ChatBubbleTextColor"
android:BackGround="?ChatBubbleBackGroundColor"
...
</TextView>
这篇关于如何将TextView文本颜色设置为特定的主题颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!