Панель инструментов в DialogFragment

В нашем приложении у нас есть несколько фрагментов, которые можно показать либо как полноэкранные фрагменты, либо как фрагменты диалога. Эти фрагменты наследуются от DialogFragment, и мы обязательно создадим их корректно в зависимости от режима, в котором приложение выполняется (либо в полноэкранном режиме, либо в диалоговом окне).

Мы подумали о добавлении некоторых дополнительных функций к некоторым из этих фрагментов диалога после того, как последние изменения в виджете Toolbar были представлены в библиотеке поддержки с Lollipop. Идея состоит в том, чтобы иметь тип меню опций, которое мы обычно имели бы в обычном фрагменте (т.е. Меню опций, раздутое после onCreateOptionsMenu), которое присутствует в наших подклассах DialogFragment ТОЛЬКО, когда они визуализируются как диалоги. Короче говоря: когда фрагменты отображаются в полноэкранном режиме, мы раздуваем меню традиционных опций, и когда фрагменты отображаются в виде диалогов, мы хотели бы иметь такое же меню опций, но используя новый виджет панели инструментов в автономном режиме.

Я выполнил шаги http://android-developers.blogspot.dk/2014/10/appcompat-v21-material-design-for-pre.html, и мне удалось "активировать" панель инструментов, но, похоже, меню не завышено - см. прикрепленные скриншоты (изображение одного фрагмента в полноэкранном режиме и изображение два в режиме диалога).

Можно ли даже раздуть меню опций с помощью новой панели инструментов в DialogFragment?

fullscreen modedialog mode

Ответ 1

Можно ли даже раздуть меню опций с помощью новой панели инструментов в Диалоговый фрагмент?

прежде всего, ваш дизайн в порядке, и панель инструментов должна использоваться везде, где позволяет взглянуть на это от Chris Banes google engineer ссылка:

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

Ответ 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);
}