Android 对话框片段中的工具栏

Android 对话框片段中的工具栏,android,android-fragments,android-dialogfragment,android-toolbar,Android,Android Fragments,Android Dialogfragment,Android Toolbar,在我们的应用程序中,我们有一些片段可以显示为全屏片段或对话框片段。这些片段继承自DialogFragment,我们确保根据应用程序的执行模式(全屏或对话框)正确实例化它们 在使用棒棒糖的支持库中引入了工具栏小部件中的最新更改之后,我们考虑在这些对话框片段中添加一些额外的功能。我们的想法是,只有当我们的DialogFragment子类被可视化为对话框时,才会在普通片段(即执行onCreateOptions菜单后,选项菜单膨胀)中出现我们通常会有的选项菜单类型。简言之:当片段以全屏模式显示时,我们会

在我们的应用程序中,我们有一些片段可以显示为全屏片段或对话框片段。这些片段继承自DialogFragment,我们确保根据应用程序的执行模式(全屏或对话框)正确实例化它们


在使用棒棒糖的支持库中引入了
工具栏
小部件中的最新更改之后,我们考虑在这些对话框片段中添加一些额外的功能。我们的想法是,只有当我们的
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);