DialogFragment中的工具栏

Edu*_*bas 16 android android-fragments android-dialogfragment android-toolbar

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

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

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

是否可以使用新工具栏中的选项菜单进行充气DialogFragment

全屏模式对话模式

mml*_*loo 28

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

首先你的设计是好的,工具栏应该用在每一个让我们看看这个来自Chris Banes谷歌工程师链接:

// 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);
Run Code Online (Sandbox Code Playgroud)

以及android开发人员工具栏独立示例:

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


Hir*_*bar 5

是的,DialogFragment具有setHasOptions()函数。在对话框的布局中定义工具栏,并像在活动中一样使用它。工具栏不介意处于活动,片段或对话框片段中。

确保您使用

setHasOptionsMenu(true) in onActivityCreated method....
Run Code Online (Sandbox Code Playgroud)

然后,像往常一样覆盖

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.my_menu, menu);
}
Run Code Online (Sandbox Code Playgroud)

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    return super.onOptionsItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)

  • 这行不通。相反,它处理活动本身的工具栏。 (2认同)