“后退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对象?