Android DrawerLayout 第二个操作栏在按下按钮时不会使屏幕变暗

Android DrawerLayout second actionbar does not dim the screen when button is pressed

我创建了一个程序,我像这样扩展了基本导航栏:

public class navBar extends AppCompatActivity {}

导航栏代码本身太长,无法包含在内,但它设置了一个工具栏,并设置了一个导航栏,当我在我的应用程序的大部分地方使用它时效果很好。

但是,当我尝试在扩展 class 中添加另一个导航栏时,它做了一些奇怪的事情,当我按下兴趣点按钮将其打开并运行以下代码时:

 public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == R.id.POI)
        mDrawerLayout.openDrawer(mDrawerList);
    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

它按要求打开抽屉,但屏幕上没有变暗。像这样:

例如,当我使用感兴趣的后退 button/points 按钮关闭屏幕时,它有点滞后,缓慢拖动白色但关闭。

更糟糕的是,当我打开抽屉时, 但是,当我用手指从右向左拖动打开抽屉时,它打开并且功能完美。

因为我的地图 class 也很长,所以我尽量只包括重要的代码:

 public class Map2 extends navBar {

private Toolbar toolbar;

ActionBarDrawerToggle mDrawerToggle;
private String[] mNavigationDrawerItemTitles;
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getLayoutInflater().inflate(R.layout.activity_maptest, frameLayout);
    toolbar = (Toolbar) findViewById(R.id.nav_base_toolbar);
    setSupportActionBar(toolbar);
    toolbar.setNavigationIcon(R.drawable.ic_drawer);

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerToggle = new ActionBarDrawerToggle(
            this,
            mDrawerLayout,
            toolbar,
            R.string.drawer_open,
            R.string.drawer_close
    ) {


        /** Called when a drawer has settled in a completely closed state. */
        public void onDrawerClosed(View view) {
            mDrawerList.clearChoices();
            super.onDrawerClosed(view);
            //getActionBar().setTitle(mTitle);
        }

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


    mDrawerLayout.setDrawerListener(mDrawerToggle);


    mNavigationDrawerItemTitles= getResources().getStringArray(R.array.navigation_drawer_items_array);
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.right_drawer);
mNavigationDrawerItemTitles= getResources().getStringArray(R.array.navigation_drawer_items_array);
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.right_drawer);
POIAdapter_without_image adapter2 = new POIAdapter_without_image(this, R.layout.points_of_interest, drawerItem2);

    mDrawerList.setAdapter(adapter2);

    mDrawerList.setOnItemClickListener(new DrawerItemClickListener());



}
    @Override
public boolean onPrepareOptionsMenu(Menu menu) {
    // If the nav drawer is open, hide action items related to the content view
    boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
    menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
    return super.onPrepareOptionsMenu(menu);
}

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


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_skill_view, menu);
    return true;
}

    public void onBackPressed() {
    if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
        mDrawerLayout.closeDrawer(mDrawerList);
    }
    else
        super.onBackPressed();
}

编辑: 每当我 select 兴趣点列表上的一个点时,在实际抽屉关闭后不久就可以在这里看到拖动的白线:

提到的黑色闪光似乎是 android 在我关闭抽屉后立即设置暗淡和取消暗淡设置。

这让我彻底困惑了几个晚上。谢谢大家!

setDrawerShadow给抽屉投射阴影

drawer_layout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);

更新:

drawer_shadow is .png file you put in drawable folder.

START : when drawer opens from left side.

END : when drawer opens from right side

最后的答案是打电话:

final FrameLayout mapView = (FrameLayout) getLayoutInflater().inflate(R.layout.activity_maptest, frameLayout);

当我想找到任何有用的东西时

 mDrawerLayout2 = (DrawerLayout) mapView.findViewById(R.id.drawer_layout);

例如

然后需要调用

mDrawerLayout2.closeDrawer(GravityCompat.END);

而不是

mDrawerLayout2.closeDrawer(mDrawerList);

获得所需的功能