“后退button”使用getSupportActionbar和appcompat v7工具栏

我正在使用Appcompat V7库中的新工具栏,并使用导航抽屉和碎片创build应用程序。

在一些片段中,我不想显示汉堡包图标,而是显示箭头。这很好,我是这样做的:

mDrawerToggle.setDrawerIndicatorEnabled(false); mDrawerToggle.syncState(); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); getSupportActionBar().setHomeAsUpIndicator(R.drawable.abc_ic_ab_back_mtrl_am_alpha); 

我的问题是:如何或在哪里我需要设置家庭buttonlisener或我需要听“后退”button? 我想调用主压缩方法,并设置汉堡包图标的导航抽屉图标。

你可以这样做:

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); toolbar = (Toolbar)findViewById(R.id.toolbar); if (toolbar != null) { setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } setUpNavigationDrawer(); getFragmentManager().addOnBackStackChangedListener(backStackListener); // listen to the backstack of the fragment manager } 

定义onBackSTackChangedListener:

 private FragmentManager.OnBackStackChangedListener backStackListener = new FragmentManager.OnBackStackChangedListener() { @Override public void onBackStackChanged() { setNavIcon(); }; } 

根据你的片段的后台堆栈设置图标:

 protected void setNavIcon() { int backStackEntryCount = getFragmentManager().getBackStackEntryCount(); drawerToggle.setDrawerIndicatorEnabled(backStackEntryCount == 0); } 

当抽屉图标被按下时检测:

 public boolean onOptionsItemSelected(MenuItem item) { if (drawerToggle.isDrawerIndicatorEnabled() && drawerToggle.onOptionsItemSelected(item)) { return true; } switch (item.getItemId()) { case x: return true; default: return false; } } 

并处理向上button:

 public boolean onSupportNavigateUp() { onBackPressed(); return true; } 

这对我有用。 祝你好运。

onCreate()添加这个方法:

 getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

然后重写onOptionItemSelected() ,如下所示:

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); return true; default: return super.onOptionsItemSelected(item); } } 

不知道这是否在OP的情况下,但在许多情况下,这可能是最简单的方法来实现与AppCompat工具栏的后退button。

跳过所有的setHomeButtonEnabledsetDisplayHomeAsUpEnabledonOptionsItemSelected东西,以及相关的问题 。

相反,当初始化工具栏,只需设置1)导航图标和2)导航OnClickListener为它:

 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); if (enableBackNavigation) { toolbar.setNavigationIcon(R.drawable.ic_back); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); } 

1-创buildToolbar布局;

 <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:local="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/dark_blue" android:minHeight="?attr/actionBarSize" local:popupTheme="@style/ThemeOverlay.AppCompat.Light" local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" /> 

2-将其包含在您想要toolbar的位置的布局中。

3-将以下代码粘贴到您的活动中(扩展ActionBarActivity

 private Toolbar mToolbar; //For Toolbar (Action bar) start mToolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(mToolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); mToolbar.setNavigationIcon(R.drawable.ic_back_arrow); mToolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); getSupportActionBar().setTitle("Event Details"); //For Toolbar (Action bar) end 

4-改变后点击图标到任何你想要的。

激活后退button:

 getActionBar().setDisplayHomeAsUpEnabled(enable); 

并在onBackPressed()监听点击

显然你的活动必须扩展ActionBarActivity

只需设置“导航”图标并确保在设置setSupportActionBar(toolbar)后设置了setSupportActionBar(toolbar)

 toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back)); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); 

在清单中,在你想要后退箭头工作的活动下添加这些行

android:parentActivityName =“你的父母的活动名称”