这应该是一个简单的任务,但出于某种原因,我可以找到一种方法来设置DialogFragment的标题。(我正在使用onCreateView
重载设置对话框内容)。
默认样式为标题留了一个位置,但我在类上找不到任何方法DialogFragment
来设置它。
在使用方法设置内容的时候,标题被莫名其妙地设置onCreateDialog
了,所以我想知道这是设计使然,还是在使用onCreateView
重载时有一个特殊的技巧来设置它。
这应该是一个简单的任务,但出于某种原因,我可以找到一种方法来设置DialogFragment的标题。(我正在使用onCreateView
重载设置对话框内容)。
默认样式为标题留了一个位置,但我在类上找不到任何方法DialogFragment
来设置它。
在使用方法设置内容的时候,标题被莫名其妙地设置onCreateDialog
了,所以我想知道这是设计使然,还是在使用onCreateView
重载时有一个特殊的技巧来设置它。
您可以使用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;
}
杰森的回答曾经对我有用,但现在需要添加以下内容才能显示标题。
首先,在您的 MyDialogFragmentonCreate()
方法中,添加:
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
为其他内容以匹配您的主题风格。
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();
}
类似于Ban Geoengineering的答案,但有一些修改,所以我没有编写在 中使用什么特定主题,而是在我的.DialogFragment
DialogFragment
styles.xml
在中设置标题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>
</style>
</resources>
确保生成 的活动DialogFragment
正在使用定义的AppTheme
.