Android更改弹出菜单的背景颜色

标签 android background styles popupmenu

我不明白为什么更改 Android 应用程序的颜色如此痛苦。 我尝试了多种方法来更改操作栏中弹出菜单的背景颜色,但均未成功。

显然,我正在使用 AppTheme.NoActionBar 来设置操作栏的样式。

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="navigationIcon">@drawable/ic_return_dark</item>
    <item name="overlapAnchor">false</item>
    <item name="popupMenuStyle">@style/PopupMenu</item>
</style>

<style name="PopupMenu" parent="Widget.AppCompat.PopupMenu">
    <item name="android:popupBackground">@color/color4</item>
</style>

按照我找到的例子,有这样的解释,你需要在你的自定义样式(在我的例子中是AppTheme.NoActionBar)中插入一个自定义popupMenuStyle,以便自定义popupBackground,改变弹出菜单的背景颜色。 它不起作用。

enter image description here

如何更改弹出菜单的背景颜色?

最佳答案

要更改 Android 中选项菜单的颜色,更改主题和样式无济于事。您必须初始化 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() {

   view.setBackgroundResource(R.drawable.your_color);

   ((TextView) view).setTextColor(Color.your_color);
   }
   });
   return view;
   } catch (InflateException e) {
   } catch (ClassNotFoundException e) {
   }
   }
   return null;
   }
   });
   return super.onCreateOptionsMenu(menu);
   }

关于Android更改弹出菜单的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45354331/

相关文章:

python - 如何在windows后台运行python脚本?

delphi - 对角画笔样式给我黑色区域

android - OnItemClick 和项目 View

java - Android 语音识别不起作用

Android XML 布局 - 两列行和一底行

javascript - 文本的前景图像/纹理

iOS:如何检测任何背景音乐应用程序中是否正在播放音乐?

Javascript 样式的错误

android - 基线对齐的 TextInputLayout 和 Spinner

java - 在 Activity1 fragment 上使用从 Activity2 接口(interface)检索的数据时出现问题