open from ejemplo activity android android-fragments android-dialogfragment

android - from - dialogfragment kotlin



Cómo establecer el título de DialogFragment? (5)

¿Sobrescribe onCreateDialog y establece el título directamente en el trabajo de Dialog ? Me gusta esto:

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

Esta debería ser una tarea simple, pero por alguna razón puedo encontrar una manera de establecer el título de un DialogFragment . (Estoy configurando los contenidos del diálogo usando onCreateView overload).

El estilo predeterminado deja un lugar para el título, pero no puedo encontrar ningún método en la clase DialogFragment para establecerlo.

El título se establece mágicamente de alguna manera cuando se onCreateDialog método onCreateDialog para establecer los contenidos, por lo que me pregunto si esto es por diseño o si hay un truco especial para configurarlo cuando se usa la sobrecarga onCreateView .


DialogFragment podría representarse como diálogo y como Actividad. Use el código a continuación que funcionaría correctamente para ambos

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


Puede echar un vistazo a los documentos oficiales . La forma en que lo hice es así:

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


Puede usar getDialog().setTitle("My Dialog Title")

Solo así:

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


La respuesta de Jason solía funcionar para mí, pero ahora necesita las siguientes adiciones para que aparezca el título.

En primer lugar, en el método onCreate() de onCreate() , agregue:

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

Luego, en su archivo styles.xml, agregue:

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

Después de horas de probar diferentes cosas, esta es la única que me ha hecho el truco.

NB: es posible que deba cambiar Theme.AppCompat.Light.Dialog.Alert por otra cosa para que coincida con el estilo de su tema.