如何更改上下文菜单项的颜色
How to change a context menu items color
我无法将上下文菜单栏上的项目颜色更改为白色。条形图是这样的-
我有一个扩展 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 颜色更改为白色,但这也会更改对话框和菜单弹出背景和文本颜色(我不想要)。
我遇到的其他问题是,上下文菜单的状态栏颜色变为黑色。如何在启用上下文菜单时设置状态栏颜色。
有什么方法可以更改文本颜色和状态栏颜色?
根据您的描述,
你最好编辑你自己的风格,
并让您的风格扩展 Theme.AppCompat.Light.NoActionBar 或其他主题。
您可以尝试在您的 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);
注意
You only can change StatusBarColor on Android Lollipop, remember that,
on Devices with pre-Lollipop version the statusBarColor
it's allways
Black or soemtimesTransparent
使用这个可以改变上下文菜单的颜色:
<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>
当您显示上下文菜单时,您将后退按钮颜色从 activity 或片段代码更改为白色:
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>
希望对您有所帮助!
我无法将上下文菜单栏上的项目颜色更改为白色。条形图是这样的-
我有一个扩展 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 颜色更改为白色,但这也会更改对话框和菜单弹出背景和文本颜色(我不想要)。
我遇到的其他问题是,上下文菜单的状态栏颜色变为黑色。如何在启用上下文菜单时设置状态栏颜色。
有什么方法可以更改文本颜色和状态栏颜色?
根据您的描述, 你最好编辑你自己的风格, 并让您的风格扩展 Theme.AppCompat.Light.NoActionBar 或其他主题。
您可以尝试在您的 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);
注意
You only can change StatusBarColor on Android Lollipop, remember that, on Devices with pre-Lollipop version the
statusBarColor
it's allways Black or soemtimesTransparent
使用这个可以改变上下文菜单的颜色:
<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>
当您显示上下文菜单时,您将后退按钮颜色从 activity 或片段代码更改为白色:
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>
希望对您有所帮助!