为操作栏设置背景可绘制对象,不适用于颜色.xml



我的片段中有以下代码:

 getActionBar().setBackgroundDrawable(new ColorDrawable(Color.Black));

当我单击片段中的按钮时,它会调用此代码。我将操作栏设置为黑色。但是,如果我将颜色更改为R.color.primaryColor它会一直将操作栏设置为中等灰色。不过太奇怪了。如果我将其设置为 R.color.primaryColorDark它会给我相同的灰色。

我正在使用支持操作栏,它实际上是一个工具栏。

我在这里错过了一些明显的东西吗?

[编辑]

好的,我发现如果我使用像Color.BLUE这样的 android 颜色,它工作正常,当我使用R.colors.mycustomcolor时,它会给我灰色

这是我的颜色.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="primaryColor">#2196F3</color>
    <color name="primaryColorDark">#1976D2</color>
    <color name="accentColor">#1976D6</color>
</resources>

当我将操作栏设置为这些颜色中的任何一种时,它们都会变成灰色。

我只有一种颜色.xml所以它不会为不同的布局类型采用错误的颜色。

我发现这样做!!

这是代码:

public override void OnAttach(Activity activity) {
    base.OnAttach(activity);
    var colorDrawable = new ColorDrawable(Color.White);
    activity.ActionBar.SetBackgroundDrawable(colorDrawable);
   var titleId = activity.Resources.GetIdentifier("action_bar_title", "id","android");
    var abTitle = activity.FindViewById<TextView>(titleId);
    abTitle.SetTextColor(Color.Black);
  }

或者这里另一个

Fragment中,ActionBar视图通常通过覆盖以下内容来处理:

public override void OnCreateOptionsMenu(IMenu menu, MenuInflater inflater)

回调方法;在确保已在OnCreate()中调用SetHasOptionsMenu(true);后。

您可能会得到该NullReferenceException,因为OnCreateView()是在ActionBar布局膨胀之前调用的。

通常,该方法如下所示:

public override void OnCreateOptionsMenu(IMenu menu, MenuInflater inflater) {
    //Stops the menu being reinflated on configuration changes
    if(!menu.HasVisibleItems) 
        inflater.Inflate(Resource.Menu.MenuLayout, menu);
    var myMenuItem = menu.FindItem(Resource.Id.MyMenuItem);
    //Do stuff with your menu items
}

试试这个,它必须工作

    actionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.primaryColor)));

最新更新