我的片段中有以下代码:
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)));