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
.
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;
}
// ...
}
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;
}
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.
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);
}
}
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();
}