更改片段中的ActionBar颜色

时间:2014-06-02 11:03:19

标签: android android-fragments colors android-actionbar xamarin

在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中工作?

提前致谢

3 个答案:

答案 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 将返回与片段相关联的活动。