【问题标题】:Can't Create Actionbar in Xamarin.Android无法在 Xamarin.Android 中创建操作栏
【发布时间】:2014-10-07 07:31:47
【问题描述】:

我正在尝试使用后退按钮创建 actionbar,但它没有显示

public override bool OnCreateOptionsMenu(IMenu menu) {
    MenuInflater.Inflate(Resource.Menu.ActionBarMenu, menu);
    return base.OnCreateOptionsMenu(menu);
}

public override bool OnOptionsItemSelected(IMenuItem item) {
    this.Finish();
    return base.OnOptionsItemSelected(item);
}

那是actionbar xml文件:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id = "@+id/actionBack"
        android:icon ="@drawable/arrow_l_black"
        android:title="Back"
        android:showAsAction="always" />
</menu>

我错过了什么吗?

【问题讨论】:

  • 您确定,您正在夸大正确的资源吗?不应该是 Resource.Menu.actionbar?
  • 但 xml 文件名为 ActibarMenu。 i.imgur.com/21Kzzig.png
  • 您是否在带有硬件菜单按钮的设备上进行测试?如果你按下它会发生什么?
  • @Cheesebaron 我正在使用 genymotion 模拟器进行测试。
  • 您对模拟器和应用程序的最低目标使用什么 API 级别?

标签: android xamarin xamarin.android


【解决方案1】:

如果您只想显示后退按钮并且您使用的是 API 14+,那么您可以这样做:

[Activity(Label = "Main", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);

        var button = FindViewById<Button>(Resource.Id.MyButton);
        button.Click += (sender, args) =>
        {
            var intent = new Intent(this, typeof (SecondActivity));
            StartActivity(intent);
        };
    }
}

[Activity(Label = "Second", ParentActivity = typeof(MainActivity))]
public class SecondActivity : Activity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        ActionBar.SetDisplayShowHomeEnabled(true);
    }

    public override bool OnOptionsItemSelected(IMenuItem item)
    {
        switch (item.ItemId)
        {
            case Android.Resource.Id.Home:
                NavigateUpTo(ParentActivityIntent);
                break;
        }

        return base.OnOptionsItemSelected(item);
    }
}

所以当按下按钮时,MainActivity 会启动 SecondActivity。在SecondActivityOnCreate 中,您请求显示后退按钮。然后在OnOptionsItemSelected 中等待Android.Resource.Id.Home 是所按下项目的ID。这是后退按钮的默认 ID。发生这种情况时,您调用内置的 NavigateUpTo 方法(在较低 API 级别上使用 Support v4 时在 NavUtils 中)告诉 Activity 向上导航到 Activity 属性标志中设置的 ParentActivity

ParentActivity 是通过MetaData 属性标志设置的,低于 API 14,API 级别如下:

[Activity(...)]
[MetaData("android.support.PARENT_ACTIVITY", Value = "app9.MainActivity")]
public class SecondActivity : Activity { ... }

app9 是我的小写命名空间。

使用OnCreateOptionsMenu 从 XML 文件扩充菜单用于创建额外的ActionBar 项目。在这种情况下,它会在右侧创建一个带有后退箭头的按钮或任何您定义的 @drawable/arrow_l_black Drawable

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    相关资源
    最近更新 更多