web-dev-qa-db-ja.com

DialogFragmentのタイトルを設定する方法は?

これは簡単なタスクですが、何らかの理由で DialogFragment のタイトルを設定する方法を見つけることができます。 (onCreateViewオーバーロードを使用してダイアログの内容を設定しています)。

デフォルトのスタイルはタイトルの場所を残しますが、DialogFragmentクラスで設定するメソッドが見つかりません。

onCreateDialogメソッドを使用してコンテンツを設定すると、タイトルが何らかの方法で魔法のように設定されるため、これは仕様によるものなのか、onCreateViewオーバーロードを使用するときに設定する特別なトリックがあるのでしょうか?.

160
StefanK

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;
    }
    // ...
}
308
Rob Holmes

onCreateDialogをオーバーライドし、Dialogにタイトルを直接設定できますか?このような:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.setTitle("My Title");
    return dialog;
}
73
Jason Hanley

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を別のものに変更する必要がある場合があります。

12

DialogFragmentは、ダイアログおよびアクティビティとして表すことができます。両方で適切に動作する以下のコードを使用してください

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    if (getShowsDialog()) {
        getDialog().setTitle(marketName);
    } else {
        getActivity().setTitle(marketName);
    }
}
2
Anatoliy Shuba

公式ドキュメント をご覧ください。私がやった方法は次のようなものです:

@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();
}
1
Tahir Ferli