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

Resuelto AlejandroVK asked hace 54 años • 7 respuestas

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

Esto es especialmente doloroso ya que mi DialogFragment personalizado usa 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:

ingrese la descripción de la imagen aquí

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, cabe aquí también en Android: ¿Cómo crear un Diálogo sin título?

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

AlejandroVK avatar Jan 01 '70 08:01 AlejandroVK
Aceptado

Simplemente agregue esta línea de código en suHelpDialog.onCreateView(...)

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

De esta manera estás solicitando explícitamente obtener una ventana sin título :)


EDITAR

Como @DataGrahamse @Blundellseñaló en los comentarios a continuación, es más seguro agregar la solicitud de una ventana sin título en el onCreateDialog()método en lugar de onCreateView(). De esta manera puedes evitar la molesta NPE cuando no estás usando tu fragmento como 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;
}
a.bertucci avatar Mar 07 '2013 18:03 a.bertucci

El fragmento de diálogo tiene el método setStyle, que debe llamarse antes de crear la vista 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;
}
Max Ch avatar May 08 '2013 19:05 Max Ch
FragmentManager manager = getSupportFragmentManager();
SettingsDialog sd = new SettingsDialog();
sd.setStyle(DialogFragment.STYLE_NO_TITLE, 0);
sd.show(manager, "settings_dialog");
Mosiur avatar Dec 11 '2013 08:12 Mosiur