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.