如何使ActionBar DrawerToggle按钮工作?

时间:2016-01-12 04:58:41

标签: java android android-layout material-design

enter image description here

public class MainActivity extends ActionBarActivity {
        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,R.drawable.ic_launcher, R.string.drawer_open, R.string.drawer_close) {
            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);

                invalidateOptionsMenu();
            }

            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
                Log.d(TAG, "onDrawerClosed: " + getTitle());

                invalidateOptionsMenu();
            }
        };

        mDrawerLayout.setDrawerListener(mDrawerToggle);
    }

在这里,我使用DrawerToggle并为其定义了一个函数,但它不起作用。

我应该在invalidateOptionsMenu()方法中定义什么?

3 个答案:

答案 0 :(得分:1)

启用操作栏切换按钮

// enabling action bar app icon and behaving it as toggle button
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
        R.drawable.drawer, //nav menu toggle icon
        R.string.app_name // nav drawer open - description for accessibility
    ) {
    public void onDrawerClosed(View view) {
        // calling onPrepareOptionsMenu() to show action bar icons
        invalidateOptionsMenu();
        super.onDrawerClosed(view);
    }

    public void onDrawerOpened(View drawerView) {
        // calling onPrepareOptionsMenu() to hide action bar icons
        invalidateOptionsMenu();
        super.onDrawerOpened(drawerView);
    }
};

mDrawerLayout.setDrawerListener(mDrawerToggle);


/**
 * When using the ActionBarDrawerToggle, you must call it during
 * onPostCreate() and onConfigurationChanged()...
 */

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
    //mDrawerLayout.openDrawer(mDrawer);
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    // Pass any configuration change to the drawer toggls
    mDrawerToggle.onConfigurationChanged(newConfig);
}

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // toggle nav drawer on selecting action bar app icon/title
        /*if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }*/
        switch (item.getItemId()) {
        case android.R.id.home:
             if(mDrawerLayout.isDrawerOpen(mDrawer))
             {
                 mDrawerLayout.closeDrawer(mDrawer);
             }
             else {
                 mDrawerLayout.openDrawer(mDrawer);
            }
            break;

        default:
            break;
        }
        return super.onOptionsItemSelected(item);

    }

/* *
     * Called when invalidateOptionsMenu() is triggered
     */
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    // if nav drawer is opened, hide the action items
    //boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawer);
    //menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
    return super.onPrepareOptionsMenu(menu);
}

答案 1 :(得分:0)

尼罗什指出 添加此行mDrawerToggle.syncState();

低于mDrawerLayout.setDrawerListener(mDrawerToggle);

代码中的最后一行。试试吧

答案 2 :(得分:0)

下面的代码将完美运行。

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolBar, R.string.app_name,
                    R.string.abc_action_bar_home_description) {

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

                }

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

                }
            };
            mDrawerLayout.setDrawerListener(mDrawerToggle);
            getSupportActionBar().setDisplayShowHomeEnabled(true);
            mDrawerToggle.syncState();