web-dev-qa-db-fra.com

Comment créer un DialogFragment sans titre?

Je crée un DialogFragment pour afficher des messages d'aide concernant mon application. Tout fonctionne bien sauf une chose: il y a une bande noire en haut de la fenêtre qui montre le DialogFragment, que je présume est réservé au titre, quelque chose que je ne veux pas utiliser.

Cela est particulièrement pénible car mon DialogFragment personnalisé utilise un fond blanc, le changement est donc trop notoire pour être laissé de côté.

Laissez-moi vous montrer ceci d'une manière plus graphique:

enter image description here

Maintenant, le code XML pour mon DialogFragment est le suivant:

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

Et le code de la classe qui implémente le 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;
    }

}

Et le processus de création dans l'activité principale:

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

Je ne sais vraiment pas si cette réponse, liée à un dialogue, convient ici aussi Android: Comment créer un dialogue sans titre?

Comment puis-je me débarrasser de cette zone de titre?

349
AlejandroVK

Ajoutez simplement cette ligne de code dans votre HelpDialog.onCreateView(...)

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

De cette façon, vous demandez explicitement d'obtenir une fenêtre sans titre :)


EDIT

Comme @DataGraham et @Blundell ont été soulignés dans les commentaires ci-dessous, il est plus sûr d'ajouter la demande d'une fenêtre sans titre dans la méthode onCreateDialog() à la place de onCreateView(). De cette façon, vous pouvez éviter les NPE ennuyeux lorsque vous n'utilisez pas votre fragment en tant que 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;
}
586
a.bertucci

Le fragment de dialogue a la méthode setStyle, qui doit être appelée avant la création de la vue Java Doc . Aussi le style de la boîte de dialogue peut être défini avec la même méthode

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;
}
77
Max Ch
FragmentManager manager = getSupportFragmentManager();
SettingsDialog sd = new SettingsDialog();
sd.setStyle(DialogFragment.STYLE_NO_TITLE, 0);
sd.show(manager, "settings_dialog");
20
Mosiur

Essayez de manière simple

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NO_TITLE, 0);
}
15
sonida
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;
    }   
}
11
Zulfiqar

Définissez le style sur Theme_Holo_Dialog_NoActionBar:

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