DialogFragment中的工具栏

时间:2014-12-22 18:29:19

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

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

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

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

是否可以使用DialogFragment中的新工具栏来扩充选项菜单?

fullscreen mode dialog mode

2 个答案:

答案 0 :(得分:26)

  

是否可以使用新工具栏来扩充选项菜单   DialogFragment?

首先你的设计还可以,工具栏应该用在每一个让我们看看 Chris Banes google engineer 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

答案 1 :(得分:4)

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