Android 对话框片段中的工具栏
在我们的应用程序中,我们有一些片段可以显示为全屏片段或对话框片段。这些片段继承自DialogFragment,我们确保根据应用程序的执行模式(全屏或对话框)正确实例化它们Android 对话框片段中的工具栏,android,android-fragments,android-dialogfragment,android-toolbar,Android,Android Fragments,Android Dialogfragment,Android Toolbar,在我们的应用程序中,我们有一些片段可以显示为全屏片段或对话框片段。这些片段继承自DialogFragment,我们确保根据应用程序的执行模式(全屏或对话框)正确实例化它们 在使用棒棒糖的支持库中引入了工具栏小部件中的最新更改之后,我们考虑在这些对话框片段中添加一些额外的功能。我们的想法是,只有当我们的DialogFragment子类被可视化为对话框时,才会在普通片段(即执行onCreateOptions菜单后,选项菜单膨胀)中出现我们通常会有的选项菜单类型。简言之:当片段以全屏模式显示时,我们会
在使用棒棒糖的支持库中引入了
工具栏
小部件中的最新更改之后,我们考虑在这些对话框片段中添加一些额外的功能。我们的想法是,只有当我们的DialogFragment
子类被可视化为对话框时,才会在普通片段(即执行onCreateOptions菜单
后,选项菜单膨胀)中出现我们通常会有的选项菜单类型。简言之:当片段以全屏模式显示时,我们会放大传统的选项菜单,当片段显示为对话框时,我们会放大相同的选项菜单,但在独立模式下使用新的工具栏小部件
我按照中的步骤操作,并设法“激活”工具栏,但菜单似乎没有膨胀-请参见附件中的屏幕截图(全屏模式下的图片一个片段,对话框模式下的图片二)
甚至可以在对话框片段
中使用新工具栏为选项菜单充气吗
是,DialogFragment具有setHasOptions()函数。在对话框的布局中定义工具栏,并像在活动中一样使用它。工具栏不介意位于活动、片段或对话框片段中 确保您使用
setHasOptionsMenu(true) in onActivityCreated method....
然后,像往常一样
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.my_menu, menu);
}
及
甚至可以在新工具栏处于打开状态时对选项菜单进行充气吗
一块碎片
首先,您的设计还可以,工具栏应该在任何地方都可以使用,让我们从Chris Banes谷歌工程师那里了解一下:
还有android开发者工具栏独立示例:
工具栏不应位于对话框中,而应是活动布局的一部分。这是一个你想要的非常混乱的界面,如果我不连接工具栏并为菜单充气,如何在独立模式下使用工具栏?您的解决方案只是覆盖主机活动中指定的默认选项菜单。它不会使对话框片段具有工具栏,这不起作用。相反,它处理活动本身的工具栏。我如何才能对dialogfragment隐藏工具栏?谢谢。我100%肯定这是可以做到的,克里斯·贝恩斯贴在他的帖子上的照片证明了这一点。在第五次阅读他的帖子后,我发现了我的错误:-)关于这个应用程序(在这里找到:),这里有一个屏幕截图:
onCreateOptions菜单
,它接收一个充气器
,在对话框片段
中覆盖是完全合理的,但是当然,调用充气器。充气(R.menu.my\menu)
而你却一无所获。您必须使用工具栏
的充气菜单()
方法。为什么?安卓系统的每一次转变都是另一次彻底疯狂的教训。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
// Set an OnMenuItemClickListener to handle menu item clicks
toolbar.setOnMenuItemClickListener(
new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
// Handle the menu item
return true;
}
});
// Inflate a menu to be displayed in the toolbar
toolbar.inflateMenu(R.menu.your_toolbar_menu);