如何改变菜单项的文本颜色在安卓?

我可以改变一个菜单项的背景颜色在安卓?

如果有人对此有任何解决方案,请让我知道。最后一个选项显然是自定义,但是否有任何方法可以在不自定义的情况下更改文本颜色。

298835 次浏览

简短的回答是YES。幸运的你!< br > 为此,你需要覆盖Android默认样式的一些样式:

首先,看看Android中的主题定义:

<style name="Theme.IconMenu">
<!-- Menu/item attributes -->
<item name="android:itemTextAppearance">@android:style/TextAppearance.Widget.IconMenu.Item</item>
<item name="android:itemBackground">@android:drawable/menu_selector</item>
<item name="android:itemIconDisabledAlpha">?android:attr/disabledAlpha</item>
<item name="android:horizontalDivider">@android:drawable/divider_horizontal_bright</item>
<item name="android:verticalDivider">@android:drawable/divider_vertical_bright</item>
<item name="android:windowAnimationStyle">@android:style/Animation.OptionsPanel</item>
<item name="android:moreIcon">@android:drawable/ic_menu_more</item>
<item name="android:background">@null</item>
</style>
因此,菜单中的文本出现在@android:style/TextAppearance.Widget.IconMenu.Item
中 现在,在的样式的定义中:

<style name="TextAppearance.Widget.IconMenu.Item" parent="TextAppearance.Small">
<item name="android:textColor">?textColorPrimaryInverse</item>
</style>

现在我们有了问题中的颜色名称,如果你查看系统资源的颜色文件夹:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:color="@android:color/bright_foreground_light_disabled" />
<item android:state_window_focused="false" android:color="@android:color/bright_foreground_light" />
<item android:state_pressed="true" android:color="@android:color/bright_foreground_light" />
<item android:state_selected="true" android:color="@android:color/bright_foreground_light" />
<item android:color="@android:color/bright_foreground_light" />
<!--  not selected -->
</selector>

最后,以下是你需要做的事情:

< p > TextAppearance.Widget.IconMenu覆盖”。项目”,创造自己的风格。然后将它链接到您自己的选择器,使其成为您想要的方式。 希望这对你有所帮助。 好运!< / p >

看来

  <item name="android:itemTextAppearance">@style/myCustomMenuTextAppearance</item>

在我的主题中

   <style name="myCustomMenuTextAppearance" parent="@android:style/TextAppearance.Widget.IconMenu.Item">
<item name="android:textColor">@android:color/primary_text_dark</item>
</style>

在styles.xml中,更改列表项的样式,但不更改菜单项的样式。

android中的选项菜单可以自定义设置背景或改变文本外观。菜单中的背景和文本颜色不能使用主题和样式更改。android源代码(data\res\layout\icon_menu_item_layout.xml)使用类" com.android.internal.view.menu.IconMenuItem "视图的自定义项作为菜单布局。我们可以在上面的类中进行更改以自定义菜单。为了达到同样的效果,使用LayoutInflater工厂类并设置视图的背景和文本颜色。


@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.my_menu, menu);
getLayoutInflater().setFactory(new Factory() {
@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
if (name .equalsIgnoreCase(“com.android.internal.view.menu.IconMenuItemView”)) {
try{
LayoutInflater f = getLayoutInflater();
final View view = f.createView(name, null, attrs);
new Handler().post(new Runnable() {
public void run() {
// set the background drawable
view .setBackgroundResource(R.drawable.my_ac_menu_background);


// set the text color
((TextView) view).setTextColor(Color.WHITE);
}
});
return view;
} catch (InflateException e) {
} catch (ClassNotFoundException e) {}
}
return null;
}
});
return super.onCreateOptionsMenu(menu);
}



谢谢你的代码示例。 我不得不修改它,让它与上下文菜单一起工作。 这就是我的解。

    static final Class<?>[] constructorSignature = new Class[] {Context.class, AttributeSet.class};


class MenuColorFix implements LayoutInflater.Factory {
public View onCreateView(String name, Context context, AttributeSet attrs) {
if (name.equalsIgnoreCase("com.android.internal.view.menu.ListMenuItemView")) {
try {
Class<? extends ViewGroup> clazz = context.getClassLoader().loadClass(name).asSubclass(ViewGroup.class);
Constructor<? extends ViewGroup> constructor = clazz.getConstructor(constructorSignature);
final ViewGroup view = constructor.newInstance(new Object[]{context,attrs});


new Handler().post(new Runnable() {
public void run() {
try {
view.setBackgroundColor(Color.BLACK);
List<View> children = getAllChildren(view);
for(int i = 0; i< children.size(); i++) {
View child = children.get(i);
if ( child instanceof TextView ) {
((TextView)child).setTextColor(Color.WHITE);
}
}
}
catch (Exception e) {
Log.i(TAG, "Caught Exception!",e);
}


}
});
return view;
}
catch (Exception e) {
Log.i(TAG, "Caught Exception!",e);
}
}
return null;
}
}


public List<View> getAllChildren(ViewGroup vg) {
ArrayList<View> result = new ArrayList<View>();
for ( int i = 0; i < vg.getChildCount(); i++ ) {
View child = vg.getChildAt(i);
if ( child instanceof ViewGroup) {
result.addAll(getAllChildren((ViewGroup)child));
}
else {
result.add(child);
}
}
return result;
}


@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
LayoutInflater lInflater = getLayoutInflater();
if ( lInflater.getFactory() == null ) {
lInflater.setFactory(new MenuColorFix());
}
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.myMenu, menu);
}

对我来说,这适用于Android 1.6、2.03和4.03。

试试这段代码....

 @Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.my_menu, menu);


getLayoutInflater().setFactory(new Factory() {
@Override
public View onCreateView(String name, Context context,
AttributeSet attrs) {


if (name.equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView")) {
try {
LayoutInflater f = getLayoutInflater();
final View view = f.createView(name, null, attrs);


new Handler().post(new Runnable() {
public void run() {


// set the background drawable
view.setBackgroundResource(R.drawable.my_ac_menu_background);


// set the text color
((TextView) view).setTextColor(Color.WHITE);
}
});
return view;
} catch (InflateException e) {
} catch (ClassNotFoundException e) {
}
}
return null;
}
});
return super.onCreateOptionsMenu(menu);
}

你可以通过使用SpannableString而不是String轻松地改变MenuItem文本的颜色。

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.your_menu, menu);


int positionOfMenuItem = 0; // or whatever...
MenuItem item = menu.getItem(positionOfMenuItem);
SpannableString s = new SpannableString("My red MenuItem");
s.setSpan(new ForegroundColorSpan(Color.RED), 0, s.length(), 0);
item.setTitle(s);
}

主题中的一句话:)

<item name="android:actionMenuTextColor">@color/your_color</item>

如果你正在使用新的工具栏,主题为Theme.AppCompat.Light.NoActionBar,你可以用下面的方式设置它的样式。

 <style name="ToolbarTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:textColorPrimary">@color/my_color1</item>
<item name="android:textColorSecondary">@color/my_color2</item>
<item name="android:textColor">@color/my_color3</item>
</style>`
根据我得到的结果,
android:textColorPrimary是文本颜色,显示您的活动的名称,这是工具栏的主要文本。

android:textColorSecondary是字幕和更多选项(3点)按钮的文本颜色。(是的,它根据这个属性改变了颜色!)

android:textColor是包括菜单在内的所有其他文本的颜色。

最后将主题设置为工具栏

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:theme="@style/ToolbarTheme"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"/>

我找到了,尤利卡!!

在你的应用主题中:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:actionBarStyle">@style/ActionBarTheme</item>
<!-- backward compatibility -->
<item name="actionBarStyle">@style/ActionBarTheme</item>
</style>

这是你的动作栏主题:

<style name="ActionBarTheme" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
<item name="android:background">@color/actionbar_bg_color</item>
<item name="popupTheme">@style/ActionBarPopupTheme</item
<!-- backward compatibility -->
<item name="background">@color/actionbar_bg_color</item>
</style>

这是你弹出的主题:

 <style name="ActionBarPopupTheme">
<item name="android:textColor">@color/menu_text_color</item>
<item name="android:background">@color/menu_bg_color</item>
</style>

干杯,)

我是这样编程的:

public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.changeip_card_menu, menu);
for(int i = 0; i < menu.size(); i++) {
MenuItem item = menu.getItem(i);
SpannableString spanString = new SpannableString(menu.getItem(i).getTitle().toString());
spanString.setSpan(new ForegroundColorSpan(Color.BLACK), 0,     spanString.length(), 0); //fix the color to white
item.setTitle(spanString);
}
return true;
}

当菜单项膨胀时,我使用html标记来更改单个项目的文本颜色。希望对大家有所帮助。

public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
menu.findItem(R.id.main_settings).setTitle(Html.fromHtml("<font color='#ff3824'>Settings</font>"));
return true;
}

如果你使用菜单作为<android.support.design.widget.NavigationView />,那么只需在NavigationView中添加以下行:

app:itemTextColor="your color"

也可用colorTint图标,它将覆盖颜色为您的图标以及。为此,你必须添加以下一行:

app:itemIconTint="your color"

例子:

<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"


app:itemTextColor="@color/color_white"
app:itemIconTint="@color/color_white"


android:background="@color/colorPrimary"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer"/>

希望对你有所帮助。

只需将此添加到您的主题

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:itemTextAppearance">@style/AppTheme.ItemTextStyle</item>
</style>


<style name="AppTheme.ItemTextStyle" parent="@android:style/TextAppearance.Widget.IconMenu.Item">
<item name="android:textColor">@color/orange_500</item>
</style>

API 21测试

多亏了麦克斯。mussterman,这是我在第22关的解决方案:

public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
MenuItem searchMenuItem = menu.findItem(R.id.search);
SearchView searchView = (SearchView) searchMenuItem.getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setSubmitButtonEnabled(true);
searchView.setOnQueryTextListener(this);
setMenuTextColor(menu, R.id.displaySummary, R.string.show_summary);
setMenuTextColor(menu, R.id.about, R.string.text_about);
setMenuTextColor(menu, R.id.importExport, R.string.import_export);
setMenuTextColor(menu, R.id.preferences, R.string.settings);
return true;
}


private void setMenuTextColor(Menu menu, int menuResource, int menuTextResource) {
MenuItem item = menu.findItem(menuResource);
SpannableString s = new SpannableString(getString(menuTextResource));
s.setSpan(new ForegroundColorSpan(Color.BLACK), 0, s.length(), 0);
item.setTitle(s);
}

硬编码的Color.BLACK可以成为setMenuTextColor方法的附加参数。而且,我只对android:showAsAction="never"的菜单项使用此方法。

最简单的方法为单个工具栏定制菜单颜色,而不是为AppTheme

    <android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay.MenuBlue">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"/>
</android.support.design.widget.AppBarLayout>

xml上常用的工具栏

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>

自定义工具栏样式

<style name="AppTheme.AppBarOverlay.MenuBlue">
<item name="actionMenuTextColor">@color/blue</item>
</style>

这是你如何用颜色给一个特定的菜单项上色,适用于所有API级别:

public static void setToolbarMenuItemTextColor(final Toolbar toolbar,
final @ColorRes int color,
@IdRes final int resId) {
if (toolbar != null) {
for (int i = 0; i < toolbar.getChildCount(); i++) {
final View view = toolbar.getChildAt(i);
if (view instanceof ActionMenuView) {
final ActionMenuView actionMenuView = (ActionMenuView) view;
// view children are accessible only after layout-ing
actionMenuView.post(new Runnable() {
@Override
public void run() {
for (int j = 0; j < actionMenuView.getChildCount(); j++) {
final View innerView = actionMenuView.getChildAt(j);
if (innerView instanceof ActionMenuItemView) {
final ActionMenuItemView itemView = (ActionMenuItemView) innerView;
if (resId == itemView.getId()) {
itemView.setTextColor(ContextCompat.getColor(toolbar.getContext(), color));
}
}
}
}
});
}
}
}
}

通过这样做,你会失去背景选择器的效果,所以下面的代码将一个自定义的背景选择器应用到所有菜单项的子项上。

public static void setToolbarMenuItemsBackgroundSelector(final Context context,
final Toolbar toolbar) {
if (toolbar != null) {
for (int i = 0; i < toolbar.getChildCount(); i++) {
final View view = toolbar.getChildAt(i);
if (view instanceof ImageButton) {
// left toolbar icon (navigation, hamburger, ...)
UiHelper.setViewBackgroundSelector(context, view);
} else if (view instanceof ActionMenuView) {
final ActionMenuView actionMenuView = (ActionMenuView) view;


// view children are accessible only after layout-ing
actionMenuView.post(new Runnable() {
@Override
public void run() {
for (int j = 0; j < actionMenuView.getChildCount(); j++) {
final View innerView = actionMenuView.getChildAt(j);
if (innerView instanceof ActionMenuItemView) {
// text item views
final ActionMenuItemView itemView = (ActionMenuItemView) innerView;
UiHelper.setViewBackgroundSelector(context, itemView);


// icon item views
for (int k = 0; k < itemView.getCompoundDrawables().length; k++) {
if (itemView.getCompoundDrawables()[k] != null) {
UiHelper.setViewBackgroundSelector(context, itemView);
}
}
}
}
}
});
}
}
}
}

下面是helper函数:

public static void setViewBackgroundSelector(@NonNull Context context, @NonNull View itemView) {
int[] attrs = new int[]{R.attr.selectableItemBackgroundBorderless};
TypedArray ta = context.obtainStyledAttributes(attrs);
Drawable drawable = ta.getDrawable(0);
ta.recycle();


ViewCompat.setBackground(itemView, drawable);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.search, menu);




MenuItem myActionMenuItem = menu.findItem( R.id.action_search);
SearchView searchView = (SearchView) myActionMenuItem.getActionView();


EditText searchEditText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
searchEditText.setTextColor(Color.WHITE); //You color here

正如你在这个问题中看到的,你应该:

<item name="android:textColorPrimary">yourColor</item>

上面的代码更改API >= v21菜单操作项的文本颜色。

<item name="actionMenuTextColor">@android:color/holo_green_light</item>

以上是API <的代码;v21

您可以通过编程方式设置颜色。

private static void setMenuTextColor(final Context context, final Toolbar toolbar, final int menuResId, final int colorRes) {
toolbar.post(new Runnable() {
@Override
public void run() {
View settingsMenuItem =  toolbar.findViewById(menuResId);
if (settingsMenuItem instanceof TextView) {
if (DEBUG) {
Log.i(TAG, "setMenuTextColor textview");
}
TextView tv = (TextView) settingsMenuItem;
tv.setTextColor(ContextCompat.getColor(context, colorRes));
} else { // you can ignore this branch, because usually there is not the situation
Menu menu = toolbar.getMenu();
MenuItem item = menu.findItem(menuResId);
SpannableString s = new SpannableString(item.getTitle());
s.setSpan(new ForegroundColorSpan(ContextCompat.getColor(context, colorRes)), 0, s.length(), 0);
item.setTitle(s);
}


}
});
}
为了改变文本颜色,你可以为菜单项设置一个自定义视图,然后你可以为文本定义颜色。

示例代码:MenuItem.setActionView()

我的情况是在选项菜单中设置文本颜色(主应用程序菜单显示在菜单按钮按下)。

API 16中测试,带有appcompat-v7-27.0.2库,AppCompatActivity用于MainActivityAppCompat主题用于AndroidManifest.xml中的应用程序。

styles.xml:

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


<style name="PopupTheme" parent="@style/ThemeOverlay.AppCompat.Light">
<item name="android:textColorSecondary">#f00</item>
</style>

不知道textColorSecondary是否影响其他元素,但它控制菜单文本的颜色。


我搜索了一些关于这个主题的示例,但所有现成的代码片段都不起作用。

所以我想用appcompat-v7库的源代码(特别是. aar包的res文件夹)来研究它。

虽然在我的情况下,我使用Eclipse与爆炸. aar依赖。因此,我可以更改默认样式并检查结果。不知道如何分解库以直接与GradleAndroid工作室一起使用。它值得进行另一项调查。

所以我的目的是找到res /价值/ values.xml文件中用于菜单文本的颜色(我几乎确定该颜色在那里)。

  1. 我打开该文件,然后复制所有颜色,将它们放在默认颜色的下面以覆盖它们,并为所有这些颜色分配#f00值。
  2. 启动应用程序。
  3. 许多元素有红色背景或文本颜色。还有菜单上的东西。这正是我所需要的。
  4. 以5-10行为单位块删除添加的颜色,以secondary_text_default_material_light颜色项结束。
  5. res文件夹(或更好的在res /颜色)内的文件中搜索该名称,我发现在颜色/ abc_secondary_text_material_light.xml文件中只出现了一次(我使用Sublime Text进行这些操作,因此更容易找到我需要的东西)。
  6. 回到values.xml,为@color/abc_secondary_text_material_light找到了8个用法。
  7. 它是一个主题,所以在2个主题中剩下4个:Base.ThemeOverlay.AppCompat.LightPlatform.AppCompat.Light
  8. 第一个主题是第二个主题的子主题,因此该颜色资源只有2个属性:android:textColorSecondary和__abc1。
  9. 直接在values.xml中更改它们的值并运行应用程序,我发现最终正确的属性是android:textColorSecondary
  10. 接下来,我需要一个主题或另一个属性,这样我就可以在我的应用程序的style.xml中更改它(因为我的主题的父元素是Theme.AppCompat.Light而不是ThemeOverlay.AppCompat.Light)。
  11. 我在同一个文件中搜索Base.ThemeOverlay.AppCompat.Light。它有一个子ThemeOverlay.AppCompat.Light
  12. 在搜索ThemeOverlay.AppCompat.Light时,我发现它在Base.Theme.AppCompat.Light.DarkActionBar主题中作为actionBarPopupTheme属性值使用。
  13. 我的应用程序的主题Theme.AppCompat.Light.DarkActionBar是发现的Base.Theme.AppCompat.Light.DarkActionBar的孩子,所以我可以在我的styles.xml中使用该属性而没有问题。
  14. 正如在上面的示例代码中所看到的,我从前面提到的ThemeOverlay.AppCompat.Light创建了一个子主题,并更改了android:textColorSecondary属性。

https://i.imgur.com/LNfKdzC.png

在Kotlin中我写了这些扩展:

fun MenuItem.setTitleColor(color: Int) {
val hexColor = Integer.toHexString(color).toUpperCase().substring(2)
val html = "<font color='#$hexColor'>$title</font>"
this.title = html.parseAsHtml()
}






@Suppress("DEPRECATION")
fun String.parseAsHtml(): Spanned {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Html.fromHtml(this, Html.FROM_HTML_MODE_LEGACY)
} else {
Html.fromHtml(this)
}
}

并像这样使用:

menu.findItem(R.id.main_settings).setTitleColor(Color.RED)

将它添加到我的styles.xml中对我有用

<item name="android:textColorPrimary">?android:attr/textColorPrimaryInverse</item>

要更改菜单项文本颜色,请使用下面的代码

<style name="AppToolbar" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:itemTextAppearance">@style/menu_item_color</item>
</style>

在哪里

<style name="menu_item_color">
<item name="android:textColor">@color/app_font_color</item>
</style>

如果要为单个菜单项设置颜色,自定义工具栏主题不是正确的解决方案。为了实现这一点,你可以使用android:actionLayout和菜单项的动作视图。

首先为操作视图创建一个XML布局文件。在这个例子中,我们使用一个按钮作为一个动作视图:

menu_button.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">


<Button
android:id="@+id/menuButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Done"
android:textColor="?android:attr/colorAccent"
style="?android:attr/buttonBarButtonStyle"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />


</androidx.constraintlayout.widget.ConstraintLayout>

在上面的代码片段中,我们使用android:textColor="?android:attr/colorAccent"自定义按钮文本的颜色。

然后在菜单的XML布局文件中,包括app:actionLayout="@layout/menu_button",如下所示:

main_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">


<item
android:id="@+id/menuItem"
android:title=""
app:actionLayout="@layout/menu_button"
app:showAsAction="always"/>
</menu>

最后重写活动中的onCreateOptionsMenu()方法:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
MenuItem item = menu.findItem(R.id.menuItem);
Button saveButton = item.getActionView().findViewById(R.id.menuButton);
saveButton.setOnClickListener(view -> {
// Do something
});
return true;
}

...或片段:

@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater){
inflater.inflate(R.menu.main_menu, menu);
MenuItem item = menu.findItem(R.id.menuItem);
Button saveButton = item.getActionView().findViewById(R.id.menuButton);
button.setOnClickListener(view -> {
// Do something
});
}

有关操作视图的更多详细信息,请参见Android开发者指南

我使用的是材质设计,当工具栏在一个小屏幕上时,点击更多选项会显示一个空白的白色下拉框。为了解决这个问题,我想在主AppTheme中添加了这个:

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="android:itemTextAppearance">@style/menuItem</item>
</style>

然后创建了一个样式,你可以将菜单项的textColor设置为你想要的颜色。

<style name="menuItem" parent="Widget.AppCompat.TextView.SpinnerItem">
<item name="android:textColor">@color/black</item>
</style>

父名称Widget.AppCompat.TextView.SpinnerItem我不认为这太重要,它应该仍然有效。

只要去 值-样式和内部样式和类型 你的颜色< / p >

添加textColor如下所示

<style name="MyTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light">
<item name="android:textColor">@color/radio_color_gray</item>
</style>

并在xml文件中的工具栏中使用它

<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/MyTheme.PopupOverlay" />