如何更改ActionBar的文本颜色?我继承了Holo Light主题,能够更改ActionBar的背景,但找不到可调整的属性来更改文本颜色。
好的,我可以使用android:textColorPrimary属性更改文本颜色,但这也会更改在ActionBar按钮上溢出时显示的下拉菜单的文本颜色。有什么办法可以更改那些下拉菜单/列表的颜色吗?
如何更改ActionBar的文本颜色?我继承了Holo Light主题,能够更改ActionBar的背景,但找不到可调整的属性来更改文本颜色。
好的,我可以使用android:textColorPrimary属性更改文本颜色,但这也会更改在ActionBar按钮上溢出时显示的下拉菜单的文本颜色。有什么办法可以更改那些下拉菜单/列表的颜色吗?
有很多答案已经过时了,所以我会更新帖子并展示如何在ActionBar(工具栏)和ActionBar弹出菜单中更改文本颜色和背景颜色。
在Android中(截至2018年5月),使用Action bar(Toolbar)的最新方法是使用无ActionBar的主题,并使用Toolbar代替。
所以这是你需要做的:
在Activity(继承自AppCompatActivity)中声明Toolbar:
Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(myToolbar);
在Activity的布局xml中添加工具栏。在这里,我们将设置我们自定义(覆盖的主题),请注意android:theme="@style/ThemeOverlay.AppTheme.ActionBar"
和app:popupTheme="@style/ThemeOverlay.AppTheme.PopupMenu"
,它们会起作用。
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppTheme.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppTheme.PopupMenu"
app:layout_constraintTop_toTopOf="parent" />
在styles.xml文件中,您需要重写这两个样式以设置自定义颜色:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="actionBarTheme">@style/ThemeOverlay.AppTheme.ActionBar</item>
<item name="actionBarPopupTheme">@style/ThemeOverlay.AppTheme.PopupMenu</item>
</style>
<style name="ThemeOverlay.AppTheme.ActionBar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="android:textColorPrimary">@color/action_bar_text_color</item>
<item name="android:background">@color/action_bar_bg_color</item>
</style>
<style name="ThemeOverlay.AppTheme.PopupMenu" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="android:background">@color/popup_bg_color</item>
<item name="android:textColorPrimary">@color/popup_text_color</item>
</style>
就这样吧,朋友们。
顺便说一句,如果你问我,我会说:是的,整个主题的事情真是一团糟。
在API >= 21上,找到了一个不需要创建自己的布局就可以很好地完成它的方法。
它仅会为操作栏内的文本和可绘制项着色。
希望对某人有用。
<!--Material design primary colors-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/accent</item>
<item name="android:navigationBarColor">@color/primary_dark</item>
<item name="actionBarTheme">@style/AppBaseTheme.Toolbar</item>
</style>
<!--Action bar-->
<style name="AppBaseTheme.Toolbar" parent="Widget.AppCompat.ActionBar.Solid">
<item name="android:textColorPrimary">@color/action_bar_text</item>
<item name="colorControlNormal">@color/action_bar_text</item>
</style>
private void setActionbarTextColor(ActionBar actBar, int color) {
String title = actBar.getTitle().toString();
Spannable spannablerTitle = new SpannableString(title);
spannablerTitle.setSpan(new ForegroundColorSpan(color), 0, spannablerTitle.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
actBar.setTitle(spannablerTitle);
}
然后,只需将其添加到您的操作栏并设置新的颜色即可使用。
ActionBar actionBar = getActionBar(); // Or getSupportActionBar() if using appCompat
int red = Color.RED
setActionbarTextColor(actionBar, red);
您可以使用如下的扩展函数:
private fun ActionBar.setTitleColor(color: Int) {
val text = SpannableString(title ?: "")
text.setSpan(ForegroundColorSpan(color),0,text.length, Spannable.SPAN_INCLUSIVE_INCLUSIVE)
title = text
}
然后使用以下代码将其应用于您的 ActionBar
:
actionBar?.setTitleColor(Color.RED)
在检查了所有答案之后,这是我使用的解决方案。
<!-- Base application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorAccent">@color/Button_color</item>
<item name="android:editTextStyle">@style/EditTextStyle</item>
<item name="android:typeface">monospace</item>
<item name="android:windowActionBar">true</item>
<item name="colorPrimary">@color/Title_Bar_Color</item>
<item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
<item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
</style>
<style name="EditTextStyle" parent="Widget.AppCompat.EditText"/>
<style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
<item name="titleTextStyle">@style/ActionBarTitleText</item>
<item name="android:background">@color/Title_Bar_Color</item>
<item name="background">@color/Title_Bar_Color</item>
<item name="subtitleTextStyle">@style/ActionBarSubTitleText</item>
</style>
<style name="ActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
<item name="android:textColor">@color/solid_white</item>
<item name="android:textSize">12sp</item>
</style>
<style name="ActionBarSubTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle">
<item name="android:textColor">@color/solid_white</item>
<item name="android:textSize">12sp</item>
</style>
更改所需的颜色,它将正常工作。
actionBar.setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>"));
或者
getSupportActionBar().setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>"));
将以下代码放入您的主题样式中即可。
<item name="android:textColorPrimary">@color/yourcolor</item>
<item name="actionMenuTextColor">@color/your_color</item>
,不要使用Android命名空间,希望能帮到你。 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="actionMenuTextColor">@color/actionMenuTextColor</item>
</style>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="android:textColorSecondary">@color/white</item>
<item name="android:textColor">@color/white</item>
</style>
用你自己的颜色替换颜色。
- Shoaib KakalfindViewById(...)
来实现这一点。styles.xml
:
...
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
...
</style>
...
activity_main.xml
:
...
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbarMain"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:titleTextColor="@color/colorOnPrimary"
...
/>
...
MainActivity.kt
:
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
...
override fun onCreate(savedInstanceState: Bundle?) {
...
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
setSupportActionBar(binding.toolbarMain)
...
}
...
}
这里的 Style.xml 就像这样:
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="actionBarTheme">@style/MyTheme</item>
</style>
<style name="MyTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:actionBarStyle">@style/AppTheme.ActionBarStyle</item>
</style>
<style name="AppTheme.ActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:titleTextStyle">@style/AppTheme.ActionBar.TitleTextStyle</item>
</style>
<style name="AppTheme.ActionBar.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
<item name="android:textColor">@color/colorBlack</item>
</style>
你应该添加
<item name="actionBarTheme">@style/MyTheme</item>