0

I create a class extends DialogFragment class, my code is as below, my problem is the dialog hides under status bar(in the system) and the toolbar(in the activity), I refer the question here DialogFragment not floating, acts embeded or as another fragment add the onCreate function and set the style, but the dialog still only hides under toolbar, not as the tutorial said it will float on the activity window.

public class PasswordDialog extends DialogFragment {
......
public static PasswordDialog newInstance(PdfFragment pdfFragment) {
    Log.i(sClassTag,"newInstance in PdfFragmentPasswordDialog");
    PdfFragmentPasswordDialog passwordDialog = new PdfFragmentPasswordDialog();
    passwordDialog.mPdfFragment = pdfFragment;
    setInteractionListener(pdfFragment);
    return passwordDialog;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Pick a style based on the num.
    int style = DialogFragment.STYLE_NORMAL, theme = 0;
    setStyle(style, theme);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    Log.i(sClassTag,"onCreateView in PdfFragmentPasswordDialog");
    // Inflate the layout to use as dialog or embedded fragment
    mView = inflater.inflate(R.layout.layout_password, container, false);
    addButtonListener();
    addEdittextListener();
    return mView;
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Log.i(sClassTag,"onCreateView in onCreateDialog");
    Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    return dialog;
}
void showPasswordDialog(boolean isFirstTime) {
....
 FragmentManager fragmentManager = getActivity().getFragmentManager();

 show(fragmentManager, "dialog");
 ...
}

The layout file is

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
    android:layout_width="48dp"
    android:layout_height="48dp"
    android:src="@drawable/ic_img_passwordkey_48"
    android:id="@+id/key_icon"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="20dp"
    android:contentDescription="@string/password_input_hint_message"/>

<Space
    android:layout_width="match_parent"
    android:layout_height="16dp" />

<EditText
    android:imeOptions="flagNoExtractUi"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textPassword"
    android:textColorHint="@color/password_dialogUI_hint_text_color"
    android:textColor="@color/password_dialogUI_text_color"
    android:textSize="12sp"
    android:hint="@string/password_input_hint_message"
    android:ems="10"
    android:id="@+id/dialogUI_edit_text"
    android:textCursorDrawable="@null"
    android:fontFamily="sans-serif"
    android:layout_marginStart="8dp"
    android:layout_marginEnd="8dp"
    android:textDirection="locale"/>

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/password_error_warning_message"
    android:textColor="@color/password_dialogUI_warning_color"
    android:id="@+id/dialogUI_warning_text"
    android:textSize="12sp"
    android:visibility="invisible"
    android:fontFamily="sans-serif"
    android:paddingStart="4dp"
    android:paddingEnd="4dp"
    android:layout_marginStart="8dp"/>

<Space
    android:layout_width="match_parent"
    android:layout_height="8dp" />

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="8dp">

<Button
    android:text="@string/password_ok_button"
    android:textColor="@drawable/layout_disable_text_color"
    android:minWidth="64dp"
    android:layout_width="wrap_content"
    android:layout_height="36dp"
    android:id="@+id/password_dialogUI_ok_button"
    android:layout_alignParentEnd="true"
    style="?android:attr/borderlessButtonStyle"
    android:background="@drawable/layout_password_button_background"
    android:layout_marginEnd="8dp"/>

<Button
    android:text="@string/password_cancel_button"
    android:textColor="@drawable/layout_disable_text_color"
    android:minWidth="64dp"
    android:layout_width="wrap_content"
    android:layout_height="36dp"
    android:id="@+id/password_dialogUI_cancel_button"
    style="?android:attr/borderlessButtonStyle"
    android:layout_toStartOf="@+id/password_dialogUI_ok_button"
    android:background="@drawable/layout_password_button_background"
    android:layout_marginEnd="8dp"/>

Community
  • 1
  • 1
newszer
  • 440
  • 1
  • 4
  • 23

2 Answers2

1
  1. In Activity, try to use you use fragment.show(), instead of call your own show().

    PasswordDialog fragment = PasswordDialog();
    fragment.show(getFragmentManager(), "TAG_HERE");
    


2. Add android:minWidth and android:minHeight to your xml.

<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:minWidth="1000dp"  
android:minHeight="1000dp">

See below: Full Screen DialogFragment in Android


Added:

  1. To resize your DialogFragment, you can set values in onResume.

    public void onResume()
    {
        super.onResume();
        Window window = getDialog().getWindow();
    
        // You can define popup_width and popup_height
        int width = getResources().getDimensionPixelSize(R.dimen.popup_width);
        int height = getResources().getDimensionPixelSize(R.dimen.popup_height); 
    
        window.setLayout(width, height);
        window.setGravity(Gravity.CENTER); // Optional
    }  
    

See below:
How to set DialogFragment's width and height?
https://stackoverflow.com/a/17916441/850347

Community
  • 1
  • 1
Stanley Ko
  • 3,383
  • 3
  • 34
  • 60
  • Thank you, I try to directly call show function it works, you save my day, but I set the dialog width as the 70% of screen width it does not work, do you know how to set it? – newszer Feb 08 '17 at 09:01
  • I added about resize FragmentDialog. If you like it, you can select this answer as "accepted". – Stanley Ko Feb 08 '17 at 09:26
1

here is steps to custom DialogFragment:

1.inflate custom view from xml on method

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState)
{

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

    View view = inflater.inflate(R.layout.XXX,
            container, false);
    //TODO:findViewById, etc
    return view;
}

2.set your dialog's width an height in onResume(),remrember in onResume()/onStart(),seems didn't work in other method

public void onResume()
{
    super.onResume();
    Window window = getDialog().getWindow();
    window.setLayout(width, height);
    window.setGravity(Gravity.CENTER);
    //TODO:
}