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

3

我在更改上下文菜单栏中项目的颜色为白色方面遇到了困难。该栏目看起来像这样-

enter image description here

我有一个继承自AppCompatActivity的活动。我正在使用带有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
@Aspicas,您需要工具栏的XML吗? - Jainendra
检查一下我的答案。也许能帮到你。 - Aspicas
3个回答

2
您可以尝试在 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_width="match_parent"
    android:layout_height="wrap_content"
    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 总是黑色或者有时是透明的。


谢谢,这个解决方案有效。但是我在工具栏上的搜索对话框会弹出一个带有黑色背景的建议框。有什么办法可以修复吗? - Jainendra
谢谢Aspicas。当启用上下文菜单时,状态栏颜色会变为黑色。有什么办法可以解决吗? - Jainendra
@Jaguar,请检查 Update2 - Aspicas
那么......我不知道,抱歉。我会去搜索一下,如果我找到了什么,我会再写信给你的。你可以接受这个答案并提出另一个问题,也许其他用户可以帮助你解决这个问题。 - Aspicas

1
上下文菜单颜色更改可以使用以下内容实现:

 <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>

希望这有所帮助!

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接