这应该是一项简单的任务,但出于某种原因,我可以找到一种方法来设置DialogFragment的标题。 (我正在使用onCreateView
重载设置对话框内容。
默认样式为标题留下了一个位置,但我在DialogFragment
类上找不到任何方法来设置它。
当onCreateDialog
方法用于设置内容时,标题以某种方式神奇地设置,所以我想知道这是否是设计的,或者在使用onCreateView
时有一个特殊的技巧来设置它超载。
答案 0 :(得分:308)
您可以使用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;
}
// ...
}
答案 1 :(得分:73)
是否覆盖onCreateDialog
并直接在Dialog
上设置标题?像这样:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.setTitle("My Title");
return dialog;
}
答案 2 :(得分:12)
Jason's answer曾经为我工作,但现在需要以下新增功能才能显示标题。
首先,在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
更改为其他内容才能与主题的风格相匹配。
答案 3 :(得分:2)
DialogFragment可以表示为对话框和活动。使用下面适用于
的代码@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (getShowsDialog()) {
getDialog().setTitle(marketName);
} else {
getActivity().setTitle(marketName);
}
}
答案 4 :(得分:1)
您可以查看official docs。 我这样做是这样的:
ConstraintSet
答案 5 :(得分:0)
类似于Ban Geoengineering's answer,但进行了一些修改,因此,我不用DialogFragment
中DialogFragment
使用的默认样式来编码styles.xml
中使用的特定主题。 {1}}。
在androidx.fragment.app.DialogFragment
中设置标题。
class EditBatteryLevelFragment:DialogFragment(),SelfClosingFragment.Host
{
override fun onCreateView(
inflater:LayoutInflater,container:ViewGroup?,savedInstanceState:Bundle?
):View
{
// set dialog title
requireDialog().setTitle(R.string.edit_battery_level__title)
// .....
return someView
}
}
在styles.xml
中的应用程序主题中,覆盖android:dialogTheme
,这是DialogFragment
实例使用的默认样式。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="Theme.MaterialComponents">
<!-- BONUS READING: override material colors here, too https://material.io/develop/android/theming/color -->
<!-- override DialogFragment theme of those spawned by activities with this theme -->
<item name="android:dialogTheme">@style/AppTheme.Dialog</item>
</style>
<!-- ... -->
也在styles.xml
中,声明将由DialogFragment
实例使用的对话框主题。对于这种样式来说,继承自ThemeOverlay
很重要,这样它就可以保留您应用的主题颜色。
<!-- ... -->
<!-- define the style for your dialog -->
<style name="AppTheme.Dialog" parent="ThemeOverlay.MaterialComponents.Dialog">
<!-- add a minimun width to the dialog, so it's not too narrow -->
<item name="android:windowMinWidthMajor">@dimen/abc_dialog_min_width_major</item>
<item name="android:windowMinWidthMinor">@dimen/abc_dialog_min_width_minor</item>
<!-- display the title for dialogs -->
<item name="android:windowNoTitle">false</item>
<item name="windowNoTitle">?android:windowNoTitle</item>
</style>
</resources>
确保产生DialogFragment
的活动正在使用已定义的AppTheme
。