代码之家  ›  专栏  ›  技术社区  ›  sfirc

Android更改弹出菜单的背景色

  •  4
  • sfirc  · 技术社区  · 9 年前

    我不明白为什么为android应用程序更改颜色这么痛苦。 我尝试了几种方法来改变我的动作栏中弹出菜单的背景色,但没有成功。

    我正在使用AppTheme。很明显,动作条是一种风格。

    <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 )习惯 为了定制 弹出背景 ,更改弹出菜单的背景色。

    enter image description here

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

    2 回复  |  直到 9 年前
        1
  •  1
  •   Abhi    9 年前

    要在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);
       }
    
        2
  •  0
  •   Anubhav Malik    6 年前

    如果有人仍然想知道这个问题有没有更好的解决方案,下面是解释和答案。

    因为问题明确提到了在应用程序中使用NoActionBar主题,所以将popupMenu直接设置为AppTheme将不起作用。

    相反,您需要手动将该主题应用于xml中的工具栏

    <androidx.appcompat.widget.Toolbar
      android:layout_width="match_parent"
      android:layout_height="?attr/actionBarSize"
      app:popupTheme="@style/PopupMenu" />
    

    <style name="PopupMenu" parent="Theme.AppCompat.Light">
        <item name="android:textColor">@color/white</item>
        <item name="android:colorBackground">@color/popup_color</item>
    </style>
    
    推荐文章