open from ejemplo activity android android-dialogfragment

android - from - dialogfragment kotlin



¿Cómo crear un DialogFragment sin título? (6)

Estoy creando un DialogFragment para mostrar algunos mensajes de ayuda con respecto a mi aplicación. Todo funciona bien además de una cosa: hay una franja negra en la parte superior de la ventana que muestra el diálogo de diálogo, que supongo que está reservado para el título, algo que no quiero usar.

Esto es especialmente doloroso ya que mi DialogFragment personalizado utiliza un fondo blanco, por lo que el cambio es demasiado notorio como para dejarlo de lado.

Déjame mostrarte esto de una manera más gráfica:

Ahora el código XML para mi DialogFragment es el siguiente:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:id="@+id/holding" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/dialog_fragment_bg" > <!-- Usamos un LinearLayout para que la imagen y el texto esten bien alineados --> <LinearLayout android:id="@+id/confirmationToast" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/confirmationToastText" android:layout_width="wrap_content" android:layout_height="fill_parent" android:text="@string/help_dialog_fragment" android:textColor="#AE0000" android:gravity="center_vertical" /> </LinearLayout> <LinearLayout android:id="@+id/confirmationButtonLL" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_horizontal" > <Button android:id="@+id/confirmationDialogButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:layout_marginBottom="60dp" android:background="@drawable/ok_button"> </Button> </LinearLayout> </LinearLayout> </ScrollView>

Y el código de la clase que implementa el DialogFragment:

public class HelpDialog extends DialogFragment { public HelpDialog() { // Empty constructor required for DialogFragment } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //Inflate the XML view for the help dialog fragment View view = inflater.inflate(R.layout.help_dialog_fragment, container); TextView text = (TextView)view.findViewById(R.id.confirmationToastText); text.setText(Html.fromHtml(getString(R.string.help_dialog_fragment))); //get the OK button and add a Listener ((Button) view.findViewById(R.id.confirmationDialogButton)).setOnClickListener(new OnClickListener() { public void onClick(View v) { // When button is clicked, call up to owning activity. HelpDialog.this.dismiss(); } }); return view; } }

Y el proceso de creación en la Actividad principal:

/** * Shows the HelpDialog Fragment */ private void showHelpDialog() { android.support.v4.app.FragmentManager fm = getSupportFragmentManager(); HelpDialog helpDialog = new HelpDialog(); helpDialog.show(fm, "fragment_help"); }

Realmente no sé si esta respuesta, relacionada con un diálogo, también se ajusta aquí a Android: ¿Cómo crear un diálogo sin título?

¿Cómo puedo deshacerme de esta área de título?


El fragmento de diálogo tiene el método setStyle, que debe llamarse antes de crear la vista de Java Doc . También se puede configurar el estilo del diálogo con el mismo método.

public static MyDialogFragment newInstance() { MyDialogFragment mDialogFragment = new MyDialogFragment(); //Set Arguments here if needed for dialog auto recreation on screen rotation mDialogFragment.setStyle(DialogFragment.STYLE_NO_TITLE, 0); return mDialogFragment; }


Establezca el estilo en Theme_Holo_Dialog_NoActionBar:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(STYLE_NORMAL, android.R.style.Theme_Holo_Dialog_NoActionBar); }


Prueba de manera fácil

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(STYLE_NO_TITLE, 0); }


Solo agregue esta línea de código en su HelpDialog.onCreateView(...)

getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);

De esta manera, estás pidiendo explícitamente que obtengas una ventana sin título :)


EDITAR

Como @DataGraham y @Blundell señalaron en los comentarios a continuación, es más seguro agregar la solicitud de una ventana sin título en el método onCreateDialog() lugar de onCreateView() . De esta manera, puede prevenir la NPE cuando no esté utilizando su fragmento como un Dialog :

@Override public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog dialog = super.onCreateDialog(savedInstanceState); // request a window without the title dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); return dialog; }


FragmentManager manager = getSupportFragmentManager(); SettingsDialog sd = new SettingsDialog(); sd.setStyle(DialogFragment.STYLE_NO_TITLE, 0); sd.show(manager, "settings_dialog");


public class LoginDialog extends DialogFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.login_dialog, null); getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); return view; } }