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


163

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

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

onCreateDialogメソッドを使用してコンテンツを設定すると、タイトルがどういうわけか魔法のように設定されるので、これは設計によるのか、またはonCreateViewオーバーロードを使用するときに設定する特別なトリックがあるのか​​と思います。

回答:


312

使用できます 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;
    }
    // ...
}

6
はい、確かにgetDialog()。setTitle()でうまくいきます。ソリューションを見た後、そのように機能することは非常に理にかなっていますが、何らかの理由で、タイトルをDialogFragmentクラス自体(setStyle()とDialogFragment.STYLE_NO_TITLEが定義されているのと同じ場所)に設定する呼び出しが必要でした。解決策をありがとうございました。
StefanK

1
タイトルの背景を変更したい場合はどうすればよいですか。それは可能ですか?
MinceMan 2012年

5
また、ダイアログがまだ作成されていないので、あなたがフラグメントののonCreate()メソッドでは、ダイアログのタイトルを設定することができないことに注意してください:)
greg7gkb

2
@Rob Holmesダイアログクラスの外部(インスタンスを作成する場所)からタイトルを設定したい。つまり、MyDialogFragment myFragment = new MyDialogFragment(); myFragment.getDialog()。setTitle( "myTitle"); myFragment.show(getFragmentManager()、 "myTitle"); ただし、この時点ではgetDialog()はnullを返すようです。ここからタイトルを設定する別の方法はありますか(独自のsetTitleメソッドを作成せずに)?
David Doria

1
一般的なケースでは、ジェイソンの怒鳴るアプローチのほうが正しいと思います。
ミシェル

74

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

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

9
フラグメントはダイアログだけでなく使用できるため、ソリューションが優れています
ruX

このソリューションは、xamarin.androidにも役立ちます
Shittu Joseph Olugbenga

また、上記のコードに基づいている私の、より最近の答えを参照してください。stackoverflow.com/a/41798042/1617737
禁止-ジオエンジニアリング

14

ジェイソンの答えは以前はうまく機能していましたが、タイトルを表示するには次の追加が必要です。

まず、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(私はそれが一度だけ設定された保証にもかかわらず)、またそれが重複したタイトルになったとして十分。
samis

2

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

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

1

あなたはで見ることができます公式ドキュメント。私がした方法は次のとおりです:

@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();
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.