如何使用AppCompat Library在ActionBar中显示导航抽屉图标

时间:2014-07-22 09:56:12

标签: android android-actionbar navigation-drawer android-appcompat

我的NavigationDrawer图标有问题,我希望它在ActionBar中可见。需要向用户显示他可以通过从屏幕左边缘滑动来打开我的应用程序中的抽屉。 android

我以前使用此代码没有任何问题,但在这个应用程序中它运行不正常,我不知道问题是什么。请帮帮我。

这是我的代码:

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.left_drawer);

    ArrayList<Integer> smIcon_adrs = new ArrayList<Integer>();
    smIcon_adrs.add(R.drawable.sm_font);
    smIcon_adrs.add(R.drawable.sm_size);
    smIcon_adrs.add(R.drawable.sm_count);
    smIcon_adrs.add(R.drawable.sm_about);
    ArrayAdapter<Integer> sm_adapter = new smIcoAdapter(getBaseContext(),
            smIcon_adrs);

    mDrawerList.setAdapter(sm_adapter);

    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.drawable.ic_drawer, R.string.hello_world, R.string.app_name) {

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

            getSupportActionBar().setTitle("دعا عهد");
            supportInvalidateOptionsMenu(); 
            super.onDrawerClosed(view);
        }

        /** Called when a drawer has settled in a completely open state. */
        public void onDrawerOpened(View drawerView) {
            getSupportActionBar().setTitle("امکانات");
            supportInvalidateOptionsMenu(); 
            super.onDrawerOpened(drawerView);
                                        // onPrepareOptionsMenu()
        }
    };

    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 
    mDrawerLayout.setDrawerListener(mDrawerToggle);

在这里:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu items for use in the action bar
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);

    return super.onCreateOptionsMenu(menu);
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
     mDrawerToggle.syncState();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.action_play:
        if (mp.isPlaying()) {
            item.setIcon(R.drawable.actn_play);
            mp.pause();
        } else {
            updateProgressBar();
            mp.start();
            item.setIcon(R.drawable.actn_stop);
        }
        break;

    }
    if (mDrawerToggle.onOptionsItemSelected(item)) {

        return true;
    }
    return super.onOptionsItemSelected(item);
}
public boolean onPrepareOptionsMenu(Menu menu) {
    mDrawerLayout.isDrawerOpen(mDrawerList);
    // menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
    return super.onPrepareOptionsMenu(menu);
}

1 个答案:

答案 0 :(得分:1)

以下是有类似问题的人,您可以测试在那里发布的解决方案:https://stackoverflow.com/a/23332975/1738838

据你所知,你错过了这种方法:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    mDrawerToggle.onConfigurationChanged(newConfig);
}