无法在 android 版本 4.2.2 上使用 android.support.v7.widget.Toolbar 获取后退按钮和菜单选项的点击事件
Unable to get click events on back button and menu options using android.support.v7.widget.Toolbar on android version 4.2.2
我有一个布局,我在其中使用 android.support.v7.widget.Toolbar
添加了一个工具栏。以下是我的布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
tools:context="com.riyaz.activities.lessons.EvaluationActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_gravity="top"
android:layout_height="@dimen/session_rec_page_title_bar_height"
android:orientation="vertical"
android:paddingTop="@dimen/appbar_padding_top"
android:theme="@style/RiyazThemeModernLight.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:gravity="end"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/RiyazThemeModernLight.PopupOverlay">
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
...........
为了启用后退按钮,我在 activity 的 onCreate()
方法中使用了以下代码(扩展 android.support.v7.app.AppCompatActivity
):
// Setting up the toolbar ..
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
// setting the action on clicking on the back button ..
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
我面临的问题是,这对于 android 版本 5.1.1(Nexus 5 设备)非常有效,但我无法点击设备的后退按钮(以及菜单选项)运行 android 4.2.2(Nexus 4 设备)。令我惊讶的是,对于我之前使用 android.support.v7.widget.Toolbar
的某些活动,使用上述代码在两种设备上都能完美运行。有人知道我可能哪里出错了吗?
PS:android 版本 4.2.2 的后退按钮不起作用的布局有一些自定义视图。这会成为问题吗?
如果有人仍然对这个问题有疑问,我在我的案例中找到了解决方案。我想错误来自我这边。我有一个 FrameLayout
覆盖我的工具栏。只需转到 Android Studio 中的视图选项,看看您的布局是否未重叠。
我有一个布局,我在其中使用 android.support.v7.widget.Toolbar
添加了一个工具栏。以下是我的布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
tools:context="com.riyaz.activities.lessons.EvaluationActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_gravity="top"
android:layout_height="@dimen/session_rec_page_title_bar_height"
android:orientation="vertical"
android:paddingTop="@dimen/appbar_padding_top"
android:theme="@style/RiyazThemeModernLight.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:gravity="end"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/RiyazThemeModernLight.PopupOverlay">
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
...........
为了启用后退按钮,我在 activity 的 onCreate()
方法中使用了以下代码(扩展 android.support.v7.app.AppCompatActivity
):
// Setting up the toolbar ..
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
// setting the action on clicking on the back button ..
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
我面临的问题是,这对于 android 版本 5.1.1(Nexus 5 设备)非常有效,但我无法点击设备的后退按钮(以及菜单选项)运行 android 4.2.2(Nexus 4 设备)。令我惊讶的是,对于我之前使用 android.support.v7.widget.Toolbar
的某些活动,使用上述代码在两种设备上都能完美运行。有人知道我可能哪里出错了吗?
PS:android 版本 4.2.2 的后退按钮不起作用的布局有一些自定义视图。这会成为问题吗?
如果有人仍然对这个问题有疑问,我在我的案例中找到了解决方案。我想错误来自我这边。我有一个 FrameLayout
覆盖我的工具栏。只需转到 Android Studio 中的视图选项,看看您的布局是否未重叠。