如何更改上下文菜单项颜色

Posted

技术标签:

【中文标题】如何更改上下文菜单项颜色【英文标题】:How to change a context menu items color 【发布时间】:2015-11-17 12:14:57 【问题描述】:

我无法将上下文菜单栏上的项目颜色更改为白色。条形图如下所示-

我有一个扩展 AppCompatActivity 的 Activity。我正在使用带有Theme.AppCompat.Light.NoActionBar 主题的工具栏。 style.xml 如下所示:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:actionBarStyle" tools:ignore="NewApi">@style/MyActionBar</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="windowActionModeOverlay">true</item>
        <item name="android:windowTranslucentStatus">true</item>
        <item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
        <item name="actionModeStyle">@style/LStyled.ActionMode</item>
        <item name="colorPrimary">@android:color/white</item>
        <item name="android:textColorSecondary">@android:color/white</item>
        <item name="android:colorPrimaryDark">@android:color/white</item>
        <item name="colorControlNormal">@color/edit_text_border</item>
        <item name="colorControlActivated">@color/blue</item>
    </style>

    <style name="LStyled.ActionMode" parent="@style/Widget.AppCompat.ActionMode">
        <item name="background">@color/blue</item>
        <item name="actionMenuTextColor">@android:color/white</item>
        <item name="android:actionBarStyle">@style/MyActionBar</item>
    </style>

<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
        <item name="android:background" tools:ignore="NewApi">@color/blue</item>
        <item name="background">@color/blue</item>
        <item name="android:textColorPrimary">#fff</item>
        <item name="android:textColor">#fff</item>
    </style>

当我切换到上下文菜单时,使用以下代码,项目颜色从白色变为黑色-

MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.lead_list_context_menu, menu);

我还尝试将主题更改为 Theme.AppCompat.NoActionBar,这会将 ActionBar 颜色更改为白色,但这也会更改对话框和菜单弹出背景和文本颜色(我不想要)。

我遇到的其他问题是,使用上下文菜单,状态栏颜色变为黑色。启用上下文菜单时如何设置状态栏颜色。

有什么方法可以改变文本颜色和状态栏颜色?

【问题讨论】:

您能发布您的 XML 布局文件吗? @Aspicas 你想要工具栏的 XML 吗? 检查我的答案。也许对你有帮助 【参考方案1】:

您可以尝试在您的 XML 布局文件中更改工具栏上的主题样式:

试试这个,或者它可以帮助你做类似的代码:

 <android.support.v7.widget.Toolbar 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/activity_my_toolbar"
    android:layout_
    android:layout_
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

要更改标题颜色,您可以以编程方式进行:

toolbar.setTitleTextColor(0xFFFFFFFF);

更新1

要更改 Popup 背景颜色,您可以直接在新主题上为该弹出窗口指定颜色,然后在 AndroidManifest.xml 上指定颜色,尝试类似的操作:

 <style name="AppTheme" parent="android:Theme.Light">
    <item name="android:popupMenuStyle">@style/PopupMenu</item>
</style>

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

AndroidManifest.xml

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
.............
</application>

更新2

当上下文菜单启用时,您可以再次以编程方式更改 statusBar 颜色:

试试看:

getWindow().setStatusBarColor(0xFFFFFFFF);

如果在getWindow()方法上报错,试试:

Window window = activity.getWindow();

window.setStatusBarColor(0xFFFFFFFF);

注意

您只能在 Android Lollipop 上更改 StatusBarColor,请记住, 在具有预棒棒糖版本的设备上,statusBarColor 总是 黑色或有时透明

【讨论】:

谢谢,这个解决方案有效。但是我在工具栏上的搜索对话框在深色背景的弹出窗口中给出了建议。无论如何要解决这个问题? 谢谢 Aspicas。启用上下文菜单时,状态栏颜色变为黑色。知道如何解决这个问题吗? @Jaguar 检查Update2 那么...我不知道对不起...,我去搜索一下,如果我发现了什么我会再给你写信。您可以接受该答案并提出另一个问题,也许其他用户可以帮助您解决该问题。【参考方案2】:

使用这个可以改变上下文菜单颜色:

 <style name="LStyled.ActionMode" parent="@style/Widget.AppCompat.ActionMode">
        <item name="titleTextStyle">@style/actionmode_textcolor_style</item>
    </style>

<style name="actionmode_textcolor_style" parent="TextAppearance.AppCompat.Widget.ActionMode.Title">
        <item name="android:textColor">@color/white</item>
        <item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
    </style>

当您显示上下文菜单时,您将活动或片段代码的后退按钮颜色更改为白色:

final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
upArrow.setColorFilter(getResources().getColor(R.color.white), PorterDuff.Mode.SRC_ATOP);
getSupportActionBar().setHomeAsUpIndicator(upArrow);

您还可以使用以下方法更改上下文菜单的背景颜色:

<item name="actionModeBackground">@color/green</item>

希望这会有所帮助!

【讨论】:

【参考方案3】:

根据您的描述, 你最好编辑自己的风格, 并让您的样式扩展 Theme.AppCompat.Light.NoActionBar 或其他主题。

【讨论】:

我已经覆盖了 Theme.AppCompat.Light.NoActionBar 主题。问题仅出现在上下文菜单中

以上是关于如何更改上下文菜单项颜色的主要内容,如果未能解决你的问题,请参考以下文章

将鼠标悬停在上下文菜单上时如何更改 li 项的颜色

上下文菜单选择颜色和框架大小 Swift 5 iOS 13

如何在 Delphi 的 IDE 上下文菜单中添加菜单项

如何在 Eclipse 中启用“浏览部署位置...”上下文菜单项?

如何进行活动菜单文本颜色更改导航下拉项子菜单? [复制]

如何在 wpf 的分层数据模板中显示树视图项的上下文菜单