Панель инструментов в DialogFragment
В нашем приложении у нас есть несколько фрагментов, которые можно показать либо как полноэкранные фрагменты, либо как фрагменты диалога. Эти фрагменты наследуются от DialogFragment
, и мы обязательно создадим их корректно в зависимости от режима, в котором приложение выполняется (либо в полноэкранном режиме, либо в диалоговом окне).
Мы подумали о добавлении некоторых дополнительных функций к некоторым из этих фрагментов диалога после того, как последние изменения в виджете Toolbar
были представлены в библиотеке поддержки с Lollipop. Идея состоит в том, чтобы иметь тип меню опций, которое мы обычно имели бы в обычном фрагменте (т.е. Меню опций, раздутое после onCreateOptionsMenu
), которое присутствует в наших подклассах DialogFragment
ТОЛЬКО, когда они визуализируются как диалоги. Короче говоря: когда фрагменты отображаются в полноэкранном режиме, мы раздуваем меню традиционных опций, и когда фрагменты отображаются в виде диалогов, мы хотели бы иметь такое же меню опций, но используя новый виджет панели инструментов в автономном режиме.
Я выполнил шаги http://android-developers.blogspot.dk/2014/10/appcompat-v21-material-design-for-pre.html, и мне удалось "активировать" панель инструментов, но, похоже, меню не завышено - см. прикрепленные скриншоты (изображение одного фрагмента в полноэкранном режиме и изображение два в режиме диалога).
Можно ли даже раздуть меню опций с помощью новой панели инструментов в DialogFragment
?
![fullscreen mode]()
![dialog 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);
}