因此,我构建了一个应用程序,其中包含一些主页作为顶级目标片段。用户可以在主页(一、二、三等)中单击以调出更多详细信息片段(page_one_item1_details、page_two_item3_details等)。这样做时,汉堡按钮会像预期的那样变成向后箭头。
public class MainActivity extends AppCompatActivity {
private AppBarConfiguration mAppBarConfiguration;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
}
private void initViews() {
final Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final DrawerLayout drawerLayout = findViewById(R.id.drawer_layout);
final NavController navController = Objects.requireNonNull(
(NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment))
.getNavController();
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home,
R.id.nav_main_page_one,
R.id.nav_main_page_two,
R.id.nav_main_page_three,
R.id.nav_main_page_four)
.setOpenableLayout(drawerLayout).build();
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(
(NavigationView) findViewById(R.id.nav_view), navController);
final ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(
this, drawerLayout, toolbar, R.string.drawer_open,
R.string.drawer_close) {
@Override
public void onDrawerSlide(final View drawerView, final float slideOffset) {
super.onDrawerSlide(drawerView, slideOffset);
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(drawerView.getWindowToken(), 0);
}
};
drawerLayout.addDrawerListener(actionBarDrawerToggle);
actionBarDrawerToggle.syncState();
}
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onSupportNavigateUp() {
return NavigationUI.navigateUp(
Navigation.findNavController(this, R.id.nav_host_fragment), mAppBarConfiguration)
|| super.onSupportNavigateUp();
}
}
如果我单击Android后退按钮,应用程序将按预期返回主页片段,但如果我单击顶部后退按钮(代替汉堡包),它会弹出抽屉而不是返回。有人能告诉我是否遗漏了什么吗?我需要更改我的主活动代码,还是必须将一些代码放在其他地方?我已经尝试了上述代码的几个变体,但它仍然会弹出抽屉。
我也尝试过:
return Navigation.findNavController(this, R.id.nav_host_fragment), drawerLayout)
|| super.onSupportNavigateUp();
和
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
return NavigationUI.navigateUp(navController, mAppBarConfiguration)
|| super.onSupportNavigateUp()
注意-即使移除onSupportNavigateUp,在任何情况下都会打开抽屉。无后台功能。
不要使用ActionBarDrawerToggle。
从android开发者网站:覆盖onSupportNavigateUp()以处理导航
@Override
public boolean onSupportNavigateUp() {
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
return NavigationUI.navigateUp(navController, appBarConfiguration)
|| super.onSupportNavigateUp();
}
我不得不移除我的整个:
final ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(
this, drawerLayout, toolbar, R.string.drawer_open,
R.string.drawer_close) {
@Override
public void onDrawerSlide(final View drawerView, final float slideOffset) {
super.onDrawerSlide(drawerView, slideOffset);
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(drawerView.getWindowToken(), 0);
}
};
drawerLayout.addDrawerListener(actionBarDrawerToggle);
actionBarDrawerToggle.syncState();
现在一切都像我所期望的那样,当它是一个后退箭头时,后退汉堡按钮后退/向上,当它是一个汉堡时,会打开抽屉。
我是从一个示例项目开始这个项目的,所以我没有仔细研究ActionBarDrawerToggle是什么或做什么就把这部分放在了里面。现在花时间在谷歌上。。。
我正在用最新的appcompat支持库实现Lollipop风格的导航抽屉,但问题是汉堡包图标从未显示。仅显示后退图标。 这是我的活动代码 这是我的样式文件 布局文件 在这两种情况下,只有返回箭头显示,我读了很多帖子,但似乎没有什么不同。任何帮助都将不胜感激。
我知道如何改变抽屉图标,如果它在左侧,但我没有找到任何解决方案,改变导航抽屉汉堡图标,如果抽屉是在右侧。任何帮助都是可以感激的。
有人能告诉我如何创建活动到这个主要活动,导航抽屉将看到在所有他们?我需要使用这个特定的MainActivity代码。我不需要使用碎片,只要3个简单的活动将添加到这个抽屉。 NavDrawer布局:
我实现了双抽屉布局。我还建立了一个ActionBarDrawerToggle。 我的问题是当我点击主页按钮时,我的左抽屉打开并播放动画。打开时我的右抽屉也显示抽屉打开动画。这会导致与主页图标奇怪的同步问题,即使使用mDrawerToggle.sync状态(); 我要做的是拦截打开左侧抽屉的home button click事件,以便测试哪个抽屉打开,然后适当地关闭那个抽屉。有没有办法在主页图标上设
我有一个在几个活动之间过渡的导航抽屉。在每个活动中,我都有一个基础片段,它可能启动其他片段。我希望导航抽屉切换图标显示时,我在基础片段,但当我添加另一个片段,我需要显示后箭头。 我一直在遵循riwnodennyk在的示例:使用片段时在Android导航抽屉图像和上插入符号之间切换 但这对我不起作用。箭头确实会出现,但我无法单击它。当点击它时,什么也不会发生。 非碱基片段中的OptionsMenuL
你知道我如何在Android/支持库中找到原来的汉堡包图标吗?(或如何显示) 在我的活动中 布局文件 styles.xml