大佬教程收集整理的这篇文章主要介绍了Android棒棒糖工具栏在打开/关闭抽屉和后退按钮之间切换,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
以前我的代码看起来像:@H_559_3@mainActivity.java
@Override protected void onCreate(Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); setContentView(R.layout.activity_main); Log.v("MAIN","CREATE"); initViews(); setListeners(); getFragmentManager().addOnBACkStackChangedListener(new FragmentManager.onBACkStackChangedListener() { @Override public void onBACkStackChanged() { shouldDisplayHomeUp(); } }); mNavigationDrawerFragment = (NavigationDrawerFragment) getFragmentManager().findFragmentById(R.id.navigation_drawer); mtitle = gettitle(); // Set up the drawer. mNavigationDrawerFragment.setUp( R.id.navigation_drawer,(DrawerLayout) findViewById(R.id.drawer_layout)); }
NavigationDrawerFragment.java
public void setUp(int fragmentId,DrawerLayout drawerLayout) { mFragmentContainerView = getActivity().findViewById(fragmentId); mDrawerLayout = drawerLayout; mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,GravityCompat.START); ((MainActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled@R_450_6334@; ((MainActivity) getActivity()).getSupportActionBar().setHomeButtonEnabled@R_450_6334@; mDrawerToggle = new ActionBarDrawerToggle(getActivity(),mDrawerLayout,((MainActivity) getActivity()).getToolbar(),R.String.navigation_drawer_open,R.String.navigation_drawer_closE) { @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); if (!isAdded()) { return; } getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu() } @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); if (!isAdded()) { return; } if (!mUserLearnedDrawer) { // The user manually opened the drawer; store this flag to prevent auto-showing // the navigation drawer automatically in the future. mUserLearnedDrawer = true; SharedPreferences sp = PreferenceManager .getDefaultSharedPreferences(getActivity()); sp.edit().putBoolean(PREF_user_LEARNED_DRAWER,truE).apply(); } if (mDrawerListView != null) { } getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu() } @Override public void onDrawerSlide(View drawerView,float slideOffset) { super.onDrawerSlide(drawerView,slideOffset); } }; // If the user hasn't 'learned' about the drawer,open it to introduce them to the drawer,// per the navigation drawer design guidelines. if (!mUserLearnedDrawer && !mFromSavedInstanceStatE) { mDrawerLayout.openDrawer(mFragmentContainerView); } // Defer code dependent on restoration of prevIoUs instance state. mDrawerToggle.setDrawerInDicatorEnabled@R_450_6334@; mDrawerLayout.post(new Runnable() { @Override public void run() { mDrawerToggle.syncState(); } }); mDrawerLayout.setDrawerListener(mDrawerTogglE); }
现在我修改了我的代码:@H_559_3@mainActivity.java
@Override protected void onCreate(Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); setContentView(R.layout.activity_main); mToolbar = (Toolbar) findViewById(R.id.toolbar); if (mToolbar != null) { setSupportActionBar(mToolbar); getSupportActionBar().setDisplayHomeAsUpEnabled@R_450_6334@; } initViews(); setListeners(); mNavigationDrawerFragment = (NavigationDrawerFragment) getFragmentManager().findFragmentById(R.id.navigation_drawer); mtitle = gettitle(); // Set up the drawer. mNavigationDrawerFragment.setUp( R.id.navigation_drawer,(DrawerLayout) findViewById(R.id.drawer_layout)); shouldDisplayHomeUp(); getFragmentManager().addOnBACkStackChangedListener(new FragmentManager.onBACkStackChangedListener() { @Override public void onBACkStackChanged() { mBACkCount++; shouldDisplayHomeUp(); } }); }
NavigationDrawerFragment.java
public void setUp(int fragmentId,GravityCompat.START); mDrawerToggle = new ActionBarDrawerToggle(getActivity(),// per the navigation drawer design guidelines. if (!mUserLearnedDrawer && !mFromSavedInstanceStatE) { mDrawerLayout.openDrawer(mFragmentContainerView); } // Defer code dependent on restoration of prevIoUs instance state. mDrawerToggle.setDrawerInDicatorEnabled@R_450_6334@; mDrawerLayout.post(new Runnable() { @Override public void run() { mDrawerToggle.syncState(); } }); mDrawerLayout.setDrawerListener(mDrawerTogglE); }
public void shouldDisplayHomeUp (){ Boolean canBACk = getFragmentManager().getBACkStackEntryCount() > 0; mNavigationDrawerFragment.getDrawerToggle().setDrawerInDicatorEnabled(!canBACk); }
但是后箭头未显示
我试过通话
getSupportActionBar().setDisplayHomeAsUpEnabled(canBACk); getSupportActionBar().setHomeButtonEnabled(canBACk);
所以后箭头加注,但点击它没有任何效果
@Override public void onCreate(Bundle savedInstanceStatE) { ... getActionBar().setDisplayHomeAsUpEnabled@R_450_6334@; }
这意味着您将必须在onOptionsItemSELEcted上执行后台程序,并检查R.id.home.为了避免在单击汉堡包菜单时调用例程,请在onOptionsItemSELEcted上检查是否可以进行回拨.
http://developer.android.com/training/implementing-navigation/ancestral.html#up
编辑
要得到你想要的,你必须实现自己的导航例程.
@H_186_5@mToolbar.setNavigationOnClickListener(new View.onClickListener() { @Override public void onClick(View v) { if(shouldBACk()) { //call onBACkpressed or something if(displayBACkAgain) return; //return after so you don't call syncState(); }else if (mNavigationDrawerFragment.isDraweropen()) mNavigationDrawerFragment.closeDrawer(); else mNavigationDrawerFragment.openDrawer(); mNavigationDrawerFragment.getActionBarDrawerToggle().syncState(); } }); }要启用BACkbutton图标,只需调用getSupportActionBar().setDisplayHomeAsUpEnabled@R_450_6334@;禁用它只是@L_957_15@mNavigationDrawerFragment.getActionBarDrawerToggle().syncState();
以上是大佬教程为你收集整理的Android棒棒糖工具栏在打开/关闭抽屉和后退按钮之间切换全部内容,希望文章能够帮你解决Android棒棒糖工具栏在打开/关闭抽屉和后退按钮之间切换所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。