我接受了谷歌对话框材料设计的提示。 对于我的应用程序,我正在查看导航抽屉活动,该活动在编辑工具栏的一堆片段之间交换。
我想要的是一个全屏对话框,其中包含"关闭"按钮和工具栏角上的保存按钮。你可以在这里看到它: https://material.io/design/components/dialogs.html#full-screen-dialog
我正在关注Android开发人员的指南: https://developer.android.com/guide/topics/ui/dialogs
问题:当在对话框内设置工具栏时,它会完全混淆我的工具栏中的下一个片段。一旦对话框设置工具栏,Activity.setTitle()之类的东西就不会改变工具栏的标题。此外,覆盖方法OnCreateOptionsMenu(菜单,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是仅在DialogFragment的xml中使用的工具栏的特定ID:
<?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>
普通工具栏有另一个ID。
正如我所说,我认为问题源于((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
,因为当你设置一个supportActionBar时,它不会回到之前的那个。我无法想到一个解决方法。
当Dialog关闭时,如何保存副本并返回原始SupportActionBar?
感谢。