Я воспользовался советами в Google Material Design on Dialogs.Для моего приложения я смотрю на активность в Навигаторе навигации, которая переключается между кучей фрагментов, которые редактируют панель инструментов по своему усмотрению.
Мне нужен полноэкранный диалог с кнопкой «Закрыть» и кнопкой сохранения.по углам панели инструментов.Вы можете увидеть это здесь: https://material.io/design/components/dialogs.html#full-screen-dialog
Я следую руководству разработчика Android: https://developer.android.com/guide/topics/ui/dialogs
Проблема: При настройке панели инструментов внутри диалогового окна работает, но она полностью мешаетмоя панель инструментов для следующих фрагментов.Как только диалог устанавливает панель инструментов, такие вещи, как Activity.setTitle (), не меняют заголовок панели инструментов.Кроме того, переопределенный метод OnCreateOptionsMenu (menu, inflater) не вызывается, поэтому я даже не могу надувать представления в меню (панели инструментов) после запуска диалога.
Я подозреваю, что это потому, что я изменяю панель инструментов действия, но яне знаю, как это сделать иначе.Внутри фрагмента, вызывающего диалоговое окно, которое у меня есть:
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
AddListDialogFragment newFragment = new AddListDialogFragment();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.add(R.id.drawer_layout, newFragment).addToBackStack(null).commit();
Здесь находится средство раздачи: Внутри DialogFragment у меня есть это:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_add_list, container, false);
Toolbar toolbar = rootView.findViewById(R.id.toolbarDialog);
toolbar.setTitle("Create List");
((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
actionBar.setHomeAsUpIndicator(android.R.drawable.ic_menu_close_clear_cancel);
}
setHasOptionsMenu(true);
return rootView;
}
Важно отметить, что R.id.toolbarDialogэто конкретный идентификатор панели инструментов, используемый только в xml DialogFragment:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbarDialog"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
</android.support.design.widget.AppBarLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Your content here"/>
</LinearLayout>
</android.support.design.widget.CoordinatorLayout>
Обычная панель инструментов имеет другой идентификатор.
Как я уже сказал, я считаю, что проблема связана с ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
,поскольку, когда вы устанавливаете supportActionBar, он не возвращается к предыдущему.Я не могу придумать обходной путь.Как сохранить копию и вернуться к исходному столбцу SupportActionBar после закрытия диалогового окна?
Спасибо.