在Xamarin中,如何更改ActionBar
中的Fragment
背景颜色和文字颜色?
以下代码适用于Activity
:
ColorDrawable colorDrawable = new ColorDrawable(Color.White);
ActionBar.SetBackgroundDrawable(colorDrawable);
int titleId = Resources.GetIdentifier("action_bar_title", "id", "android");
TextView abTitle = (TextView) FindViewById(titleId);
abTitle.SetTextColor (Color.Black);
如果我对同一个项目使用相同的代码,则在Fragment
中,我会收到以下错误:
非静态字段,方法或者需要对象引用 属性 ' Android.App.ActionBar.SetBackgroundDrawable(Android.Graphics.Drawables.Drawable)U型
在这行代码中:
ActionBar.SetBackgroundDrawable(colorDrawable);
如果我注释掉上面的代码行,我会收到此错误:
System.NullReferenceException:未将对象引用设置为实例 对象
在这行代码中:
abTitle.SetTextColor (Color.Black);
另外,我将此代码放在OnCreateView
函数中。
如何更改代码以使其在Fragment
中工作,而不是在Activity
中工作?
提前致谢
答案 0 :(得分:1)
我发现要做到这一点,我需要操作活动中的操作栏
以下是代码:
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);
}
答案 1 :(得分:1)
在Fragment
中,ActionBar
视图通常通过覆盖以下内容来处理:
public override void OnCreateOptionsMenu(IMenu menu, MenuInflater inflater)
回调方法;确保您在SetHasOptionsMenu(true);
中调用了OnCreate()
。
您可能正在获得NullReferenceException
,因为在ActionBar布局被夸大之前正在调用OnCreateView()。
通常,这就是我的方法:
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
}
答案 2 :(得分:0)
您可以随时使用Activity属性访问Fragment中的Activity 将返回与片段相关联的活动。