Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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,请注明来意。