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);
获得所需的功能
我创建了一个程序,我像这样扩展了基本导航栏:
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);
获得所需的功能