Search code examples
androidandroid-dialogfragmentdialogfragment

Android - Dialog Fragment width keeps on matching parent


Good day, apologies if this seems to be a duplicate of a question that's been asked before.

I have and Android App and I am displaying a Dialog Fragment. The problem I have is that the width of the Dialog Fragment is ignored when the base activity is showing it. Here's the code in my onCreateDialog function:

@Override  
public Dialog onCreateDialog(Bundle savedInstanceState) {  

    final Dialog dialog = new Dialog(getActivity());  
    dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  
            WindowManager.LayoutParams.FLAG_FULLSCREEN);  

    LayoutInflater layoutInflater = (LayoutInflater) getActivity()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View layout2 = layoutInflater.inflate(R.layout.fragment_item_dialog, null);

    dialog.setContentView(layout2);  
    setStyle(DialogFragment.STYLE_NORMAL, R.style.MyDialog);

    Window window = dialog.getWindow();
    window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
    window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

    window.setGravity(Gravity.TOP|Gravity.LEFT);

    WindowManager.LayoutParams params = window.getAttributes();
    params.x = 20;
    params.y = 470;
    params.width = WindowManager.LayoutParams.WRAP_CONTENT;
    params.height = WindowManager.LayoutParams.WRAP_CONTENT;

    params.copyFrom(window.getAttributes());

    window.setAttributes(params);
    // -- more code here
}

and here is my xml file fragment_item_dialog

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="400dp"
    android:layout_height="wrap_content" >  

    <!--- code here ---!>

</RelativeLayout>

The height is followed properly, but Android keeps on setting the width to match parent even though I told it to wrap content. The components inside my dialog Fragment does not exceed 400dp and I have no clue why Android is forcing my layout to match parent.

Does anyone know how to work around this? Any help is very much appreciated. Thanks.


Solution

  • Made it work, use the same code on onStart()

    @Override
    public void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
    
        if (getDialog() == null)
            return;
    
        int width = 1100;
        int height = getResources().getDisplayMetrics().heightPixels;       
        getDialog().getWindow().setLayout(width, 
                WindowManager.LayoutParams.WRAP_CONTENT);
    
    }