Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create a DialogFragment without title?

I'm creating a DialogFragment to show some help messages regarding my app. Everything works fine besides one thing: There is a black stripe at the top of the window that shows the DialogFragment, that I presume is reserved for the title, something I don't want to use.

This is specially painful since my custom DialogFragment uses a white background, so the change is way too notorious to be left aside.

Let me show you this in a more graphical manner:

enter image description here

Now the XML code for my DialogFragment is as follows:

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

And the code of the class that implements the 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;     }  } 

And the creation process in the main Activity:

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

I really don't know if this answer, related with a Dialog, fits here also Android: How to create a Dialog without a title?

How can I get rid of this title area?

like image 405
AlejandroVK Avatar asked Mar 07 '13 17:03

AlejandroVK


People also ask

How do I start a DialogFragment?

To create a DialogFragment , first create a class that extends DialogFragment , and override onCreateDialog() , as shown in the following example. Similar to how onCreateView() should create a root View in an ordinary fragment, onCreateDialog() should create a Dialog to display as part of the DialogFragment .

Is DialogFragment deprecated?

This class was deprecated in API level 28. Use the Support Library DialogFragment for consistent behavior across all devices and access to Lifecycle. A fragment that displays a dialog window, floating on top of its activity's window.

What is the difference between dialog & DialogFragment?

Dialog: A dialog is a small window that prompts the user to make a decision or enter additional information. DialogFragment: A DialogFragment is a special fragment subclass that is designed for creating and hosting dialogs.

How do you finish DialogFragment?

tl;dr: The correct way to close a DialogFragment is to use dismiss() directly on the DialogFragment. Control of the dialog (deciding when to show, hide, dismiss it) should be done through the API here, not with direct calls on the dialog. Dismiss the fragment and its dialog.


2 Answers

Just add this line of code in your HelpDialog.onCreateView(...)

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

This way you're explicitly asking to get a window without title :)


EDIT

As @DataGraham and @Blundell pointed out on the comments below, it's safer to add the request for a title-less window in the onCreateDialog() method instead of onCreateView(). This way you can prevent ennoying NPE when you're not using your fragment as a 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; } 
like image 157
a.bertucci Avatar answered Sep 22 '22 06:09

a.bertucci


Dialog fragment has setStyle method, which should be called before view creation Java Doc. Also style of the dialog can be set with the same method

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; } 
like image 28
Max Ch Avatar answered Sep 25 '22 06:09

Max Ch