【问题标题】:Toolbar in DialogFragmentDialogFragment 中的工具栏
【发布时间】:2015-02-20 21:20:43
【问题描述】:

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

在 Lollipop 支持库中引入了 Toolbar 小部件的最新更改后,我们考虑为其中一些对话框片段添加一些额外的功能。我们的想法是在我们的DialogFragment 的子类中只有当这些被可视化为对话框时才会在普通片段中拥有我们通常在普通片段中拥有的选项菜单类型(即在执行onCreateOptionsMenu 后膨胀的选项菜单)。简而言之:当片段以全屏模式显示时,我们会扩展传统的选项菜单,当片段显示为对话框时,我们希望扩展相同的选项菜单,但在独立模式下使用新的工具栏小部件。

我按照http://android-developers.blogspot.dk/2014/10/appcompat-v21-material-design-for-pre.html 中的步骤操作,并设法“激活”了工具栏,但似乎菜单没有膨胀 - 请参阅随附的屏幕截图(图片一为全屏模式,图片二为对话模式)。

甚至可以使用DialogFragment 中的新工具栏来扩展选项菜单吗?

【问题讨论】:

  • 工具栏不应该在对话框中,它应该是您活动布局的一部分。这是一个你想要的非常混乱的界面

标签: android android-fragments android-dialogfragment android-toolbar


【解决方案1】:

是否甚至可以使用新的工具栏来扩展选项菜单 DialogFragment?

首先你的设计没问题,工具栏应该可以用在任何地方,让我们看看 Chris Banes 谷歌工程师link

// 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);

还有 android 开发者工具栏独立示例:

http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html

【讨论】:

  • 谢谢。我 100% 肯定它可以做到,正如 Chris Banes 附在他的帖子上的图片证明了这一点。在第五次阅读他的帖子后,我发现了我的错误:-)
  • 关于应用程序(可在此处找到:play.google.com/store/apps/…),这是屏幕截图:lh3.googleusercontent.com/…
  • onCreateOptionsMenu,它接收到 inflater,在 DialogFragment 中覆盖是完全合理的——当然,调用 inflater.inflate(R.menu.my_menu),你将一无所获。你必须使用ToolbarinflateMenu() 方法。为什么? Android 的每一次转折都是一次彻底疯狂的教训。
【解决方案2】:

是的,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);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    return super.onOptionsItemSelected(item);
}

【讨论】:

  • 如果我不连线并扩展菜单,如何在独立模式下使用Toolbar?您的解决方案只是覆盖主机活动中指定的默认选项菜单。它不会使对话框片段具有工具栏
  • 这不起作用。相反,它处理活动本身的工具栏。
  • 如何从对话框片段中隐藏工具栏?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多