如何更改菜单项的文本颜色和背景

时间:2018-01-09 01:42:44

标签: xamarin.android

我根据本指南制作了一个菜单:https://www.youtube.com/watch?v=aGO-xcpJUBs

如何更改菜单项的文字颜色和背景?

我的档案:

styles.xml

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <style  name="MyStyle"
          parent="@android:style/Theme.DeviceDefault">
  </style>
</resources>

2.menu.xml

<?xml version="1.0" encoding="utf-8" ?>
<menu tools.context=".MainActivity"
      xmlns:tools="http://schemas.android.com/tools"
      xmlns:android="http://schemas.android.com/apk/res/android">

  <item android:title="@string/name"
        android:showAsAction="always"
        android:id="@+id/iname"/>

  <item android:title="@string/email"
        android:showAsAction="always"
        android:id="@+id/iemail"/>
</menu>

添加此行不会提供任何内容:

android:textColor="@android:color/black"

1 个答案:

答案 0 :(得分:0)

  

更改菜单项的背景

您可以在styles.xml中添加一个属性来更改菜单背景颜色:

<item name="android:itemBackground">#FFFCF8FA</item> 

这是我的styles.xml

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <style name="Theme.MyTheme" parent="Theme.MyTheme.Base">
  </style>
  <!-- Base theme applied no matter what API -->
  <style name="Theme.MyTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">

    <item name="windowActionModeOverlay">true</item>
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primaryDark</item>
    <item name="colorAccent">@color/accent</item>

    <item name="android:itemBackground">#FF8898F1</item>
  </style>
</resources>
  

更改菜单项的文本颜色

您可以通过编程方式实现此功能,使用MenuItem代替SpannableString轻松更改string文字的颜色。

这是我的代码:

public override bool OnCreateOptionsMenu(IMenu menu)
{
    MenuInflater.Inflate(Resource.Menu.menu_form, menu);

    for (int i = 0; i < menu.Size(); i++)
    {
        IMenuItem item = menu.GetItem(i);
        Android.Text.SpannableString spanString = new Android.Text.SpannableString(menu.GetItem(i).ToString());
        spanString.SetSpan(new ForegroundColorSpan(Android.Graphics.Color.Red), 0, spanString.Length(), 0); //fix the color to red
        item.SetTitle(spanString);
    }
    return true;
}

Effect