这应该是一个简单的任务,但是由于某种原因,我可以找到一种设置DialogFragment标题的方法。(我使用onCreateView
重载设置对话框的内容)。
默认样式为标题留了一个地方,但是我在DialogFragment
类上找不到任何设置它的方法。
当使用该onCreateDialog
方法设置内容时,标题以某种方式神奇地设置了,所以我想知道这是设计使然,还是使用onCreateView
重载时设置它的特殊技巧。
这应该是一个简单的任务,但是由于某种原因,我可以找到一种设置DialogFragment标题的方法。(我使用onCreateView
重载设置对话框的内容)。
默认样式为标题留了一个地方,但是我在DialogFragment
类上找不到任何设置它的方法。
当使用该onCreateDialog
方法设置内容时,标题以某种方式神奇地设置了,所以我想知道这是设计使然,还是使用onCreateView
重载时设置它的特殊技巧。
Answers:
您可以使用 getDialog().setTitle("My Dialog Title")
像这样:
public static class MyDialogFragment extends DialogFragment {
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Set title for this dialog
getDialog().setTitle("My Dialog Title");
View v = inflater.inflate(R.layout.mydialog, container, false);
// ...
return v;
}
// ...
}
是否onCreateDialog
直接在Dialog
作品上覆盖和设置标题?像这样:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.setTitle("My Title");
return dialog;
}
杰森的答案曾经对我有用,但现在需要添加以下内容才能显示标题。
首先,在您的MyDialogFragment的onCreate()
方法中,添加:
setStyle(DialogFragment.STYLE_NORMAL, R.style.MyDialogFragmentStyle);
然后,在您的styles.xml文件中,添加:
<style name="MyDialogFragmentStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">false</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">false</item>
</style>
经过数小时的尝试,这是唯一为我完成任务的方法。
注意:您可能需要将其更改Theme.AppCompat.Light.Dialog.Alert
为其他内容以匹配主题样式。
android:windowNoTitle
false
切换到Android.Support.V7.App.AppCompatDialogFragment
后Android.Support.V4.App.DialogFragment
,不需要设置,也没有足够的设置,因为它会导致标题重复(即使我确保只设置一次)。
DialogFragment可以表示为对话框和活动。使用下面的代码对两者都适用
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (getShowsDialog()) {
getDialog().setTitle(marketName);
} else {
getActivity().setTitle(marketName);
}
}
您可以看一下官方文档。我这样做的方式是这样的:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
.setTitle("My Title");
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.my_layout, null);
builder.setView(view);
return builder.create();
}