368 votes

Comment créer un DialogFragment sans titre?

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

C'est particulièrement douloureux depuis mon custom DialogFragment utilise un fond blanc, de sorte que le changement est trop notoire pour être laissé de côté.

Permettez-moi de vous montrer de plus en plus graphique:

enter image description here

Maintenant, le code XML pour mon DialogFragment est comme suit:

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

EDIT: y Compris le code de la classe qui implémente l'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 de 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, en lien avec une boîte de Dialogue, correspond ici aussi Android: Comment créer une boîte de Dialogue sans titre?

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

594voto

a.bertucci Points 4057

Il suffit d'ajouter cette ligne de code dans votre HelpDialog.onCreateView(...)

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

De cette façon, vous êtes explicitement demandé pour obtenir une fenêtre sans titre.:)


MODIFIER

En tant que @DataGraham et @Blundell a souligné sur les commentaires ci-dessous, il est plus sûr d'ajouter la demande d'un titre de moins de fenêtre dans l' onCreateDialog() méthode de onCreateView(). De cette façon, vous pouvez éviter ennoying NPE 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;
}

79voto

Max Ch Points 331

Dialogue fragment a setStyle méthode, qui doit être appelée avant la création de la vue de Java Doc. Aussi le style de la boîte de dialogue peut être réglé 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;
}

23voto

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

11voto

user2910855 Points 41

Définir le style du Theme_Holo_Dialog_NoActionBar:

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

11voto

Zulfiqar Ali Points 368
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;
    }   
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X