如何更改我的按钮图像导航抽屉开合 [英] How do I change my button image with navigation drawer opening and closing

本文介绍了如何更改我的按钮图像导航抽屉开合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个导航按钮,我的导航片段轮番活跃,并在点击打开一个抽屉式导航菜单:

I have a navigation button for my navigation fragment which turns active and opens a navigation drawer menu upon click:

现在,当我点击它,它轮番活跃,如下所示:

Now when I click it, it turns active as follows:

不过,我想用一个抽屉式导航这样的方式,即使我不单击该按钮,滑开抽屉式导航关联,按钮轮番活跃,当抽屉式导航菜单是开放的,当通过滑动关闭早在从右到左,该按钮会变为红色/无效。在code,而我试图一起工作如下:

However, I want to associate it with a navigation drawer such a way that, even if I do not click the button and slide open the navigation drawer, the button turns active when the navigation drawer menu is open and when closed by sliding back in from right to left, the button turns red/inactive. The code which I am trying to work with is as follows:

private boolean mIsNavigationOpen = false;
    private DrawerLayout drawerLayout;
    private NavigationPanelFragment dlDrawer;
    private ActionBarDrawerToggle actionBarDrawerToggle;
public boolean isNavigationOpen() {

        return mIsNavigationOpen;

    }
//----------Code for Navigation open logo button active/inactive instances
    @SuppressWarnings("deprecation")
    public void setNavigationOpen(final boolean isNavigationOpen) {
        this.mIsNavigationOpen = isNavigationOpen;
        final ImageButton mainButton = (ImageButton) findViewById(R.id.button_main);
        if(isNavigationOpen) {
            mainButton.setBackgroundResource(R.drawable.bg_helios_active);
        } else {
            mainButton.setBackgroundDrawable(null);
        }
@Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
        //----------Code for Navigation Drawer setup
        // 2. App Icon 
        drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        // 2.1 create ActionBarDrawerToggle
                 actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout,
                            R.drawable.arrow_up, R.string.drawer_open, R.string.drawer_close){

                        /** Called when a drawer has settled in a completely closed state. */
                        public void onDrawerClosed(View view) {
                           // getActionBar().setTitle(NavigationPanelFragment.activeFragmentTitle);
                           // invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
                        }

                        /** Called when a drawer has settled in a completely open state. */
                        public void onDrawerOpened(View drawerView) {
                         //   getActionBar().setTitle(NavigationPanelFragment.activeFragmentTitle);
                          //  invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
                        }
                    };


                // 2.2 Set actionBarDrawerToggle as the DrawerListener
                drawerLayout.setDrawerListener(actionBarDrawerToggle);
          }
@Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
         actionBarDrawerToggle.syncState();
    }
private void setupOnClickListenerForMainButton() {
        final ImageButton mainButton = (ImageButton) findViewById(R.id.button_main);
        mainButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(final View v) {
                toggleNavigationPanel();


            }
        });
    }
@Override
    public boolean onMenuItemSelected(final int featureId, final MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                toggleNavigationPanel();
                break;

            default:
                break;
        }
        return super.onMenuItemSelected(featureId, item);
    }
public void onNewsClicked(final View view) {
        if(mIsNavigationOpen) {
            toggleNavigationPanel();
        }

        if (isFragmentVisible(NewsFragment.TAG_NEWS_FRAGMENT)) {
            return;
        }

        FragmentStackManager.getInstance().clearBackStack(getSupportFragmentManager());
        mActiveFragment = NewsFragment.newInstance(getSupportFragmentManager());
        updateActionBarTitle();
        //For swipe action close drawer on button click
         drawerLayout.closeDrawer(R.id.drawer);
    }
public void onListsClicked(final View view) {
        if(mIsNavigationOpen) {
            toggleNavigationPanel();
        }

        if (isFragmentVisible(ListsContainerFragment.TAG_LIST_CONTAINER_FRAGMENT)) {
            return;
        }

        FragmentStackManager.getInstance().clearBackStack(getSupportFragmentManager());
        mActiveFragment = ListsContainerFragment.newInstance(getSupportFragmentManager());
        updateActionBarTitle();
        //For swipe action close drawer on button click
        drawerLayout.closeDrawer(R.id.drawer);
    }
private void toggleNavigationPanel() {
        //final FragmentStackManager manager = FragmentStackManager.getInstance();
        if (mIsNavigationOpen) {
            //NavigationPanelFragment.removeInstance(getSupportFragmentManager());
            updateActionBarTitle();
            drawerLayout.closeDrawer(R.id.drawer);
        } else {
            drawerLayout.openDrawer(R.id.drawer);
            final TextView title = (TextView) findViewById(R.id.main_title);
            title.setText(getString(R.string.title_applications));
            //NavigationPanelFragment.newInstance(getSupportFragmentManager(), manager.getTopTitle());
        }


        setNavigationOpen(!mIsNavigationOpen);
    }

您可能需要把注意力集中在main_button和togglenavigationpanel。我加了条件,如果(drawerlayout.isdraweropen(R.id.drawer)){closedrawerlayout ...} 但它没有这样做的伎俩。我想知道如果任何人有关于同任何想法?

You might want to concentrate on the main_button and togglenavigationpanel. I added the condition if(drawerlayout.isdraweropen(R.id.drawer)){closedrawerlayout...} but it didn't do the trick. I was wondering if anyone has any idea regarding the same?

谢谢!

推荐答案

这应该解决这个问题:

    @SuppressWarnings("deprecation")
        public void setNavigationOpen(final boolean isNavigationOpen) {
            this.mIsNavigationOpen = isNavigationOpen;
            mDrawerButton = (ImageButton) findViewById(R.id.button_main);
            //final ImageButton mainButton = (ImageButton) findViewById(R.id.button_main);
            if(drawerLayout.isDrawerOpen(Gravity.LEFT)) {
                mDrawerButton.setBackgroundResource(R.drawable.bg_helios_active);
            } else {
                mDrawerButton.setBackgroundDrawable(null);
            }
        }
@Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
        //----------Code for Navigation Drawer setup
        mDrawerButton = (ImageButton) findViewById(R.id.button_main);
        // 2. App Icon 
        drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        // 2.1 create ActionBarDrawerToggle
                 actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout,
                            R.drawable.bg_helios_active, R.string.drawer_open, R.string.drawer_close){

                        /** Called when a drawer has settled in a completely closed state. */
                        public void onDrawerClosed(View view) {

                                toggleNavigationPanel();
                        if(!drawerLayout.isDrawerOpen(Gravity.LEFT)){

                        }

                        /** Called when a drawer has settled in a completely open state. */
                        public void onDrawerOpened(View drawerView) {

                                toggleNavigationPanel();

                        }
                    };


                // 2.2 Set actionBarDrawerToggle as the DrawerListener
                drawerLayout.setDrawerListener(actionBarDrawerToggle);

                // just styling option for drawer
                //drawerLayout.setDrawerShadow(R.drawable.ab_bg, GravityCompat.START);


        initiateMainActionBar();

        final FragmentManager supportFragmentManager = getSupportFragmentManager();
        supportFragmentManager.addOnBackStackChangedListener(this);



    }
private void setupOnClickListenerForMainButton() {
        final ImageButton mainButton = (ImageButton) findViewById(R.id.button_main);
        mainButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(final View v) {
                //toggleNavigationPanel();
            if(drawerLayout.isDrawerOpen(Gravity.LEFT)){

                drawerLayout.closeDrawer(Gravity.LEFT);

            }else {
                drawerLayout.openDrawer(Gravity.LEFT);
            }


            }
        });
    }

private void toggleNavigationPanel() {
        if(drawerLayout.isDrawerOpen(Gravity.LEFT)){
            final TextView title = (TextView) findViewById(R.id.main_title);
            title.setText(getString(R.string.title_applications));
        } else {
            updateActionBarTitle();


        }


        setNavigationOpen(!mIsNavigationOpen);
    }

和不要忘记更换所有R.id.drawer与Gravity.LEFT

and don't forget to replace all R.id.drawer with Gravity.LEFT

这篇关于如何更改我的按钮图像导航抽屉开合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆