これは簡単なタスクですが、何らかの理由で 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;
}
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
を別のものに変更する必要がある場合があります。
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();
}