“后退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。
 跳过所有的setHomeButtonEnabled , setDisplayHomeAsUpEnabled和onOptionsItemSelected东西,以及相关的问题 。 
相反,当初始化工具栏,只需设置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 =“你的父母的活动名称”
- 在android studio中导入项目时得到“解决”错误,无法加载类“org.codehaus.groovy.runtime.typehandling.ShortTypeHandling'
- 添加到后端堆栈时,如何维护碎片状态?
- 使用自定义字体时出现问题 – “无法制作原生字体”
- 如何为Android 4.0创buildAVD
- 如何使用Retrofit从asynchronouscallback中返回String或JSONObject?
- 如何在代码中设置RelativeLayout布局参数而不是xml
- 如何从代码获取设备的IP地址?
- Android ICS API是否具有与ViewPager支持库相同的本机特性?
- 我如何将图像文件添加到json对象?