How to make DialogFragment width to Fill_Parent

前端 未结 18 2379
栀梦
栀梦 2020-12-04 08:21

I am working on an android application where I am using DialogFragment to display the dialog but its width is very small. How I can make this width to fil

相关标签:
18条回答
  • 2020-12-04 09:06

    option 1. add following code in oncreate in activity

     getDialog().getWindow()
             .setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
    

    or you can Create a custom style for Dialog

    <style name="CustomDialog" parent="AppTheme" >
      <item name="android:windowNoTitle">true</item>
      <item name="android:windowFullscreen">true</item>
      <item name="android:windowIsFloating">true</item>
      <item name="android:windowCloseOnTouchOutside">true</item>
    </style>
    
    then use that style in dialog fragment
    
    @Override public void onCreate(@Nullable Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setStyle(DialogFragment.STYLE_NORMAL, R.style.CustomDialog);
    }
    
    @Override public void onStart() {
      super.onStart();
      getDialog().getWindow()
        .setLayout(WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.MATCH_PARENT);
    }
    
    SampleDialogFragment sampleDialogFragment = new SampleDialogFragment();
    SampleDialogFragment.show(getActivity().getSupportFragmentManager(), "sometag");
    

    OR you try the following code in style will help you

    <item name="android:windowBackground">@null</item>
    

    Solution 2: dialog.window.setLayout

    class TestDialog : DialogFragment() {
    
        override fun onStart() {
            super.onStart()
    
            dialog?.window?.setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)
        }
    
    }
    
    0 讨论(0)
  • 2020-12-04 09:10

    This is how i solved when i faced this issue. Try this.

    in your DialogFragment's onActivityCreated, Add this code according to your need....

     @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            myview=inflater.inflate(R.layout.fragment_insurance_detail, container, false);
            intitviews();
            return myview;
        }
        @Override
        public void onActivityCreated(Bundle arg0) {
            super.onActivityCreated(arg0);
            getDialog().getWindow().getAttributes().windowAnimations = R.style.DialogAnimation;
            getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            getDialog().getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            getDialog().getWindow().setGravity(Gravity.CENTER);
        }
    
    0 讨论(0)
  • 2020-12-04 09:11

    I tried multiple answers listed above; they didn't work for me. This is the solution to my issue:

    In DialogFragment(), add the codes below:

    override fun onResume() {
        super.onResume()
        if (showsDialog) {
            val width = ViewGroup.LayoutParams.MATCH_PARENT
            val height = ViewGroup.LayoutParams.WRAP_CONTENT
            dialog?.window?.apply {
                setBackgroundDrawable(ColorDrawable(Color.WHITE))
                attributes.gravity = Gravity.BOTTOM
                setLayout(width, height)
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-04 09:12

    use this in onCreateView method of DialogFragment

        Display display = getActivity().getWindowManager().getDefaultDisplay();
        int width = display.getWidth();
        int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, **220**, getResources().getDisplayMetrics());
        getDialog().getWindow().setLayout(width,px);
    

    220 is dialog fragment height, change it as u wish

    0 讨论(0)
  • 2020-12-04 09:13

    In my case I also used the following approach:

        @Override
        public void onStart() {
            super.onStart();
            getDialog().getWindow().setLayout(LayoutParams.MATCH_PARENT, (int) getResources().getDimension(R.dimen.dialog_height));
        }
    }
    

    But there were still small gaps between left and right edges of the dialog and the screen edges on some Lollipop+ devices (e.g. Nexus 9).

    It was not obvious but finally I figured out that to make it full width across all the devices and platforms window background should be specified inside styles.xml like the following:

    <style name="Dialog.NoTitle" parent="Theme.AppCompat.Dialog">
        <item name="android:windowNoTitle">true</item>
        <item name="android:padding">0dp</item>
        <item name="android:windowBackground">@color/window_bg</item>
    </style>
    

    And of course this style needs to be used when we create the dialog like the following:

        public static DialogFragment createNoTitleDlg() {
            DialogFragment frag = new Some_Dialog_Frag();
            frag.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.Dialog_NoTitle);
            return frag;
    }
    
    0 讨论(0)
  • 2020-12-04 09:13

    Another solution that work for me without side effects was:

    In your class that extends DialogFragment:

    @Override
    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        setStyle(DialogFragment.STYLE_NO_TITLE, R.style.DialogStyle);
    }
    

    In your styles:

    <style name="DialogStyle" parent="ThemeOverlay.AppCompat.Dialog.Alert"></style>
    
    0 讨论(0)
提交回复
热议问题