web-dev-qa-db-fra.com

Comment définir le titre de DialogFragment?

Cela devrait être une tâche simple, mais pour une raison quelconque, je peux trouver un moyen de définir le titre d'un DialogFragment . (Je règle le contenu du dialogue en utilisant onCreateView surcharge).

Le style par défaut laisse une place au titre, mais je ne trouve aucune méthode dans la classe DialogFragment pour le définir.

Le titre est magiquement défini lorsque la méthode onCreateDialog est utilisée pour définir le contenu. Je me demande donc si c'est par sa conception ou s'il existe une astuce spéciale pour le définir lorsque vous utilisez la surcharge onCreateView .

160
StefanK

Vous pouvez utiliser getDialog().setTitle("My Dialog Title")

Juste comme ça:

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

Est-ce que remplacer onCreateDialog et définir le titre directement sur Dialog? Comme ça:

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

La réponse de Jason travaillait pour moi, mais il a maintenant besoin des ajouts suivants pour que le titre soit affiché.

Tout d'abord, dans la méthode onCreate() de votre MyDialogFragment, ajoutez:

setStyle(DialogFragment.STYLE_NORMAL, R.style.MyDialogFragmentStyle);

Ensuite, dans votre fichier styles.xml, ajoutez:

<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>

Après des heures d’essais, c’est le seul qui m’ait réussi.

NB - Vous devrez peut-être changer le Theme.AppCompat.Light.Dialog.Alert à quelque chose d’autre pour correspondre au style de votre thème.

12
ban-geoengineering

DialogFragment peut être représenté sous forme de boîte de dialogue et sous forme d'activité. Utilisez le code ci-dessous qui fonctionnerait correctement pour les deux

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

Vous pouvez jeter un oeil à la documentation officielle . La façon dont j'ai fait est comme ça:

@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