在Xamarin.Android API 24+(Android 7+)中未调用OnOptionsItemSelected

时间:2017-11-23 07:21:56

标签: c# xamarin.android android-7.0-nougat appcompatactivity android-7.1-nougat

我正在使用 Xamarin.Android 开发应用程序,该应用程序在API 23(Android 6.0)之前正常运行:

这是我的 OnCreate 事件:

protected override void OnCreate(Bundle bundle)
{
    SetTheme(Resource.Style.MyCustomThemeCompat);
    base.OnCreate(bundle);

    base.SetActionBar(FindViewById<Toolbar>(Resource.Id.toolbarMain));
    ActionBar.Title = Title;

    ActionBar.SetHomeAsUpIndicator(Resource.Drawable.ic_menu_white_24dp);

    ActionBar.SetDisplayHomeAsUpEnabled(true);
}

这是我的事件 OnOptionsItemSelected ,自从API 24+(Android 7 +)以来从未调用过:

public override bool OnOptionsItemSelected(IMenuItem item)
{
    switch (item.ItemId)
    {
        case Android.Resource.Id.Home:
            if (MDrawerLayout.IsDrawerOpen(GravityCompat.Start))
            {
                MDrawerLayout.CloseDrawers();
            }
            else
            {
                MDrawerLayout.OpenDrawer(GravityCompat.Start);
            }

            return true;
        default:
            return false;
    }
}

我的自定义风格:

<?xml version="1.0" encoding="UTF-8" ?>
<resources>
  <style name="MyCustomThemeCompat" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:colorPrimary">#01579B</item>
    <item name="android:colorPrimaryDark">#01579B</item>
    <item name="android:colorButtonNormal">#0277BD</item>
    <item name="android:textColorHint">#FAFAFA</item>
    <item name="android:textColor">#BDBDBD</item>
    <item name="android:textColorPrimary">#FFFFFF</item>
    <item name="android:windowBackground">#424242</item>
    <item name="android:elevation">4dp</item>
  </style>
</resources>

我还没有找到任何关于我在代码中应该做的更改的示例或解释。大多数例子使用一些菜单,但我不需要任何菜单。此外,我正在使用 AppCompatActivity 工具栏

现在,我只有一个汉堡菜单才能显示NavigationDrawer。

工具栏:

Hamburger menu

导航抽屉已打开:

Navigation Drawer

这里是完整代码的一个小例子:

https://github.com/FANMixco/NavigationDrawerError

以前有人经历过吗?谢谢你的建议。

1 个答案:

答案 0 :(得分:2)

首先,将您的toolbarMain.xmlAndroid.Widget.Toolbar修改为Support.V7.Widget.Toolbar

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbarMain"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?android:attr/actionBarSize"
    android:background="?android:attr/colorPrimary"/>

其次,在MainActivity

//base.SetActionBar(FindViewById<Toolbar>(Resource.Id.toolbarMain));
//ActionBar.Title = "Típicos Salvadoreños";

//ActionBar.SetHomeAsUpIndicator(Resource.Drawable.ic_menu_white_24dp);
//ActionBar.SetDisplayHomeAsUpEnabled(true);

MDrawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawer_layout);

var mToolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbarMain);
SetSupportActionBar(mToolbar);
SupportActionBar.SetDisplayHomeAsUpEnabled(true);
SupportActionBar.SetHomeAsUpIndicator(Resource.Drawable.ic_menu_white_24dp);
SupportActionBar.Title = "Típicos Salvadoreños";

然后,当您单击汉堡菜单时,将调用OnOptionsItemSelected

Effect

更新:

您可以阅读ActionBarDrawerToggle文档,注意那里的两个构造函数。 Toolbar类型为android.support.v7.widget.Toolbar