如何更改 Android 中菜单项的文本颜色?
我可以更改 Android 中菜单项的背景颜色吗?
如果有人对此有任何解决方案,请告诉我。最后一个选项显然是自定义它,但是有什么方法可以在不自定义的情况下更改文本颜色。
Can I change the background color of a Menu item in Android?
Please let me know if anyone have any solution to this. The last option will be obviously to customize it but is there any way for changing the text color without customizing it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(29)
这是使用颜色为特定菜单项着色的方法,适用于所有 API 级别:
通过这样做,您会失去背景选择器效果,因此这里是将自定义背景选择器应用于所有菜单项子项的代码。
这也是辅助函数:
This is how you can color a specific menu item with color, works for all API levels:
By doing that you loose the background selector effect, so here is the code to apply a custom background selector to all of the menu item children.
Here is the helper function also:
要更改文本颜色,您只需为 MenuItem 设置自定义视图,然后即可定义文本的颜色。
示例代码:MenuItem.setActionView()
For changing the text color, you can just set a custom view for the MenuItem, and then you can define the color for the text.
Sample Code : MenuItem.setActionView()
只需前往
值 - 样式和内部样式和类型
你的颜色
Simply just go to
Values - styles and inside styles and type
your color
添加如下 textColor
并在 xml 文件的 Toolbar 中使用它
Add textColor as below
and use it in Toolbar in xml file
我的情况是在选项菜单中设置文本颜色(按菜单按钮时显示主应用程序菜单)。
在 API 16 中使用 appcompat-v7-27.0.2 库、针对
MainActivity
和AppCompat 的
主题。AppCompatActivity
进行测试AndroidManifest.xml 中应用程序的styles.xml:
不知道
textColorSecondary
是否会影响其他元素,但它控制菜单文本颜色。我搜索了有关该主题的一些示例,但所有现成的片段都不起作用。
因此,我想使用 appcompat-v7 库的源代码(特别是 .aar 包的 res 文件夹)来研究它。
尽管在我的例子中,我使用了具有分解的 .aar 依赖项的 Eclipse。所以我可以更改默认样式并检查结果。不知道如何分解库以直接与 Gradle 或 Android Studio 一起使用。它值得进行另一条调查。
所以我的目的是找到 res/values/values.xml 文件中的哪种颜色用于菜单文本(我几乎确定颜色在那里)。
#f00
值。secondary_text_default_material_light
颜色项结束。@color/abc_secondary_text_material_light
有 8 种用法。Base.ThemeOverlay.AppCompat.Light
和Platform.AppCompat.Light
。Base.ThemeOverlay 中的
。android:textColorSecondary
和android:textColorTertiary
.AppCompat.Lightandroid:textColorSecondary
。Theme.AppCompat.Light
作为父主题,而不是ThemeOverlay.AppCompat.Light
)。Base.ThemeOverlay.AppCompat.Light
。它有一个子ThemeOverlay.AppCompat.Light
。ThemeOverlay.AppCompat.Light
我发现它在Base.Theme.AppCompat.Light.DarkActionBar
主题中用作actionBarPopupTheme
属性值。Theme.AppCompat.Light.DarkActionBar
是找到的Base.Theme.AppCompat.Light.DarkActionBar
的子主题,因此我可以在我的 中使用该属性styles.xml 没有问题。ThemeOverlay.AppCompat.Light
创建了一个子主题,并更改了android:textColorSecondary
属性。My situation was settings text color in the options menu (main app menu showed on menu button press).
Tested in API 16 with appcompat-v7-27.0.2 library,
AppCompatActivity
forMainActivity
andAppCompat
theme for the application in AndroidManifest.xml.styles.xml:
Don't know if that
textColorSecondary
affects other elements but it controls the menu text color.I searched some examples on the topic but all ready-to-use snippets didn't work.
So I wanted to investigate it with the source code for the appcompat-v7 library (specifically with the res folder of the .aar package).
Though in my case I used Eclipse with exploded .aar dependencies. So I could change the default styles and check the results. Don't know how to explode the libraries to use with Gradle or Android Studio directly. It deserves another thread of investigation.
So my purpose was so find which color in the res/values/values.xml file is used for the menu text (I was almost sure the color was there).
#f00
value to all of them.secondary_text_default_material_light
color item.@color/abc_secondary_text_material_light
.Base.ThemeOverlay.AppCompat.Light
andPlatform.AppCompat.Light
.android:textColorSecondary
andandroid:textColorTertiary
in theBase.ThemeOverlay.AppCompat.Light
.android:textColorSecondary
.Theme.AppCompat.Light
and not theThemeOverlay.AppCompat.Light
).Base.ThemeOverlay.AppCompat.Light
. It had a childThemeOverlay.AppCompat.Light
.ThemeOverlay.AppCompat.Light
I found its usage in theBase.Theme.AppCompat.Light.DarkActionBar
theme as theactionBarPopupTheme
attribute value.Theme.AppCompat.Light.DarkActionBar
was a child of the foundBase.Theme.AppCompat.Light.DarkActionBar
so I could use that attribute in my styles.xml without problems.ThemeOverlay.AppCompat.Light
and changed theandroid:textColorSecondary
attribute.Sephy的解决方案不起作用。可以使用上述方法覆盖选项菜单项文本外观,但不能覆盖项目或菜单。要做到这一点,基本上有 3 种方法:
有关更多线索,请参阅问题 4441:自定义选项菜单主题。
Sephy's solution doesn't work. It's possible to override the options menu item text appearance using the method described above, but not the item or menu. To do that there are essentially 3 ways:
See Issue 4441: Custom Options Menu Theme for more clues.
试试这个代码....
try this code....
如果您想为单个菜单项设置颜色,自定义工具栏主题并不是正确的解决方案。为此,您可以使用 android:actionLayout 和菜单项的操作视图。
首先为操作视图创建一个 XML 布局文件。在此示例中,我们使用按钮作为操作视图:
menu_button.xml
在上面的代码片段中,我们使用
android:textColor="?android:attr/colorAccent"
来自定义按钮文本颜色。然后在菜单的 XML 布局文件中,包含
app:actionLayout="@layout/menu_button"
,如下所示:main_menu.xml
最后重写
onCreateOptionsMenu()
方法您的活动:...或片段:
有关操作视图的更多详细信息,请参阅 Android 开发者指南。
If you want to set color for an individual menu item, customizing a toolbar theme is not the right solution. To achieve this, you can make use of android:actionLayout and an action view for the menu item.
First create an XML layout file for the action view. In this example we use a button as an action view:
menu_button.xml
In the code snippet above, we use
android:textColor="?android:attr/colorAccent"
to customize button text color.Then in your XML layout file for the menu, include
app:actionLayout="@layout/menu_button"
as shown below:main_menu.xml
Last override the
onCreateOptionsMenu()
method in your activity:...or fragment:
For more details on action views, see the Android developer guide.
您可以通过编程方式设置颜色。
You can set color programmatically.
只需将其添加到您的主题中
即可在 API 21 上进行测试
Simply add this to your theme
Tested on API 21
感谢 max.musterman,这是我在第 22 级中使用的解决方案:
硬编码的 Color.BLACK 可以成为 setMenuTextColor 方法的附加参数。另外,我只将其用于
android:showAsAction="never"
的菜单项。Thanks to max.musterman, this is the solution I got to work in level 22:
The hardcoded
Color.BLACK
could become an additional parameter to thesetMenuTextColor
method. Also, I only used this for menu items which wereandroid:showAsAction="never"
.将其添加到我的 styles.xml 中对我有用
Adding this into my styles.xml worked for me
感谢您提供代码示例。
我必须修改它,使其能够与上下文菜单一起使用。
这是我的解决方案。
对我来说,这适用于 Android 1.6、2.03 和 4.03。
Thanks for the code example.
I had to modify it go get it to work with a context menu.
This is my solution.
For me this works with Android 1.6, 2.03 and 4.03.
我找到了尤里卡!!
在您的应用程序主题中:
这是您的操作栏主题:
这是您的弹出主题:
干杯;)
i found it Eureka !!
in your app theme:
here is your action bar theme:
and here is your popup theme:
Cheers ;)
简短的回答是肯定的。你真幸运!
为此,您需要覆盖 Android 默认样式的一些样式:
首先,查看 Android 中主题的定义:
因此,文本的外观菜单位于
@android:style/TextAppearance.Widget.IconMenu.Item
现在,在 样式 :
现在我们有了相关颜色的名称,如果您查看系统资源的颜色文件夹:
最后,这是您需要做的:
覆盖“TextAppearance.Widget.IconMenu.Item”并创建您自己的样式。然后将其链接到您自己的选择器以使其成为您想要的方式。
希望这对您有帮助。
祝你好运!
The short answer is YES. lucky you!
To do so, you need to override some styles of the Android default styles :
First, look at the definition of the themes in Android :
So, the appearance of the text in the menu is in
@android:style/TextAppearance.Widget.IconMenu.Item
Now, in the definition of the styles :
So now we have the name of the color in question, if you look in the color folder of the resources of the system :
Finally, here is what you need to do :
Override "TextAppearance.Widget.IconMenu.Item" and create your own style. Then link it to your own selector to make it the way you want.
Hope this helps you.
Good luck!
Android 中的选项菜单可以自定义设置背景或更改文本外观。无法使用主题和样式更改菜单中的背景和文本颜色。 android源代码(data\res\layout\icon_menu_item_layout.xml)使用类“com.android.internal.view.menu.IconMenuItem”View的自定义项进行菜单布局。我们可以在上面的类中进行更改来自定义菜单。要实现相同的目的,请使用 LayoutInflater 工厂类并设置视图的背景和文本颜色。
Options menu in android can be customized to set the background or change the text appearance. The background and text color in the menu couldn’t be changed using themes and styles. The android source code (data\res\layout\icon_menu_item_layout.xml)uses a custom item of class “com.android.internal.view.menu.IconMenuItem”View for the menu layout. We can make changes in the above class to customize the menu. To achieve the same, use LayoutInflater factory class and set the background and text color for the view.
为单个工具栏(而不是 AppTheme 常用工具栏)制作自定义菜单颜色的最简单方法
styles.xml
我们的自定义工具栏样式
SIMPLEST way to make custom menu color for single toolbar, not for AppTheme
usual toolbar on styles.xml
our custom toolbar style
要更改菜单项文本颜色,请使用下面的
代码
to change menu item text color use below code
where
我使用的是材料设计,当工具栏位于小屏幕上时,单击更多选项将显示一个空白的白色下拉框。为了解决这个问题,我认为将其添加到主应用程序主题中:
然后创建一个样式,在其中将菜单项的文本颜色设置为所需的颜色。
父名称
Widget.AppCompat.TextView.SpinnerItem
我认为这不太重要,它应该仍然有效。I was using Material design and when the toolbar was on a small screen clicking the more options would show a blank white drop down box. To fix this I think added this to the main AppTheme:
And then created a style where you set the textColor for the menu items to your desired colour.
The parent name
Widget.AppCompat.TextView.SpinnerItem
I don't think that matters too much, it should still work.当菜单项膨胀时,我使用 html 标签更改单个项目的文本颜色。希望它会有所帮助。
I used the html tag to change a single item's text colour when the menu item is inflated. Hope it would be helpful.
在 Kotlin 中,我编写了这些扩展:
并像这样使用:
in Kotlin I wrote these extensions:
and used like this:
正如您在这个问题中看到的,您应该:
上面的代码更改 API >= 的菜单操作项的文本颜色v21。
上面是 API < 的代码v21
as you can see in this question you should:
Above code changes the text color of the menu action items for API >= v21.
Above is the code for API < v21
我以编程方式进行了这样的操作:
I went about it programmatically like this:
如果您将菜单用作
那么只需在NavigationView
中添加以下行:也可用 colorTint 图标,它将也覆盖你的图标的颜色。为此,您必须添加以下行:
示例:
希望它会对您有所帮助。
If you are using menu as
<android.support.design.widget.NavigationView />
then just add below line inNavigationView
:Also available colorTint for icon, it will override color for your icon as well. For that you have to add below line:
Example:
Hope it will help you.
如果您使用新的工具栏,且主题为
Theme.AppCompat.Light.NoActionBar
,则可以按以下方式设置其样式。根据我得到的结果,
android:textColorPrimary
是显示活动名称的文本颜色,它是工具栏的主要文本。android:textColorSecondary
是字幕和更多选项(3 点)按钮的文本颜色。 (是的,它根据这个属性改变了颜色!)android:textColor
是包括菜单在内的所有其他文本的颜色。最后将主题设置为工具栏
If you are using the new Toolbar, with the theme
Theme.AppCompat.Light.NoActionBar
, you can style it in the following way.According to the results I got,
android:textColorPrimary
is the text color displaying the name of your activity, which is the primary text of the toolbar.android:textColorSecondary
is the text color for subtitle and more options (3 dot) button. (Yes, it changed its color according to this property!)android:textColor
is the color for all other text including the menu.Finally set the theme to the Toolbar
你的主题中只有一行简单的内容:)
One simple line in your theme :)
似乎
我的主题和
styles.xml 中的 an 更改了列表项的样式,但没有更改菜单项的样式。
It seems that an
in my theme and
in styles.xml change the style of list-items but not menu items.
您可以使用
SpannableString
而不是String
轻松更改MenuItem
文本的颜色。You can change the color of the
MenuItem
text easily by usingSpannableString
instead ofString
.