Xamarin.Android API 24+ (Android 7+) 中未调用 OnOptionsItemSelected
OnOptionsItemSelected is not called in Xamarin.Android API 24+ (Android 7+)
我正在使用 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 和 Toolbar.
现在,我只有一个 Hamburger 菜单来显示 NavigationDrawer。
工具栏:
导航抽屉已打开:
这里是完整代码的一个小例子:
https://github.com/FANMixco/NavigationDrawerError
有人体验过吗?谢谢你的建议。
首先,将您的 toolbarMain.xml
从 Android.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
我正在使用 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 和 Toolbar.
现在,我只有一个 Hamburger 菜单来显示 NavigationDrawer。
工具栏:
导航抽屉已打开:
这里是完整代码的一个小例子:
https://github.com/FANMixco/NavigationDrawerError
有人体验过吗?谢谢你的建议。
首先,将您的 toolbarMain.xml
从 Android.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