Android Fragments 更改片段中的ActionBar颜色

pgx2nnw8  于 2023-01-21  发布在  Android
关注(0)|答案(4)|浏览(129)

在Xamarin中,如何更改Fragment中的ActionBar背景色和文本颜色?
下面是在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)"需要对象引用
在这一行代码中:

ActionBar.SetBackgroundDrawable(colorDrawable);

如果我注解掉上面的代码行,我会得到这个错误:
System.NullReferenceException:对象引用未设置为对象的示例
在这一行代码中:

abTitle.SetTextColor (Color.Black);

另外,我将此代码放在OnCreateView函数中。
需要如何更改代码才能在Fragment而不是Activity中工作?
先谢了

wixjitnu

wixjitnu1#

我发现,要做到这一点,我需要操纵活动的操作栏
下面是代码:

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);
}
vhmi4jdf

vhmi4jdf2#

您可以随时使用Activity属性从片段访问Activity,该属性将返回与片段关联的Activity。

cpjpxq1n

cpjpxq1n3#

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
}
zysjyyx4

zysjyyx44#

对于Kotlin用户来说,这非常简单,你只需要将你的活动转换为AppCompatActivity。

val color = ContextCompat.getColor(requireContext(), R.color.black)

    (activity as AppCompatActivity).supportActionBar?.setBackgroundDrawable(color.toDrawable())

相关问题