Android get full width for custom Dialog

时光总嘲笑我的痴心妄想 提交于 2019-11-28 06:11:50

You need to get the current Window and set it's LayoutParams like so:

Dialog d=new Dialog(mContext);
.........
.........
myDialog.show();
Window window = myDialog.getWindow();
window.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

Alternative(if above solution does't works)

In case above code not works well you can use a workaround

styles.xml

<style name="mydialog"></style>

Java

Dialog d=new Dialog(mContext,R.style.mydialog);
.........
.........
myDialog.show();
Window window = myDialog.getWindow();
window.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
Psypher

Two ways this can be done, first one in style.xml and second in code:

  1. Add as below in style.xml, alter the value(currently 90%) to meet your needs.
<style name="Theme_Dialog" parent="android:Theme.Holo.Dialog">
    <item name="android:windowMinWidthMajor">90%</item>
    <item name="android:windowMinWidthMinor">90%</item>
</style>
  1. Add setlayout to match_parent
 final Dialog contacts_dialog = new Dialog(ActivityGroup.this,
 R.style.theme_sms_receive_dialog);
 contacts_dialog.setContentView(R.layout.dialog_schedule_date_time);
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);

 contacts_dialog.setCancelable(true);
 contacts_dialog.setCanceledOnTouchOutside(true);
 contacts_dialog.show();
Hardeep Kumar

For full width dialog you can create custom style for dialog. Code is given below for full width dialog:

<style name="Custom_Dialog" parent="ThemeOverlay.AppCompat.Light" >
    <item name="windowMinWidthMajor">100%</item>
    <item name="windowMinWidthMinor">65%</item>
</style>

To assign this style to the dialog's constructor, add this to onCreate() method right after setContentView():

getWindow()
    .setLayout(
        ViewGroup.LayoutParams.FILL_PARENT,
        ViewGroup.LayoutParams.WRAP_CONTENT
    );

You don't need to add any style for that just try below one

  Dialog dialog = new Dialog(context);
  dialog.setContentView(R.layout.your_layout_here);
  dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
  dialog.show();

Note: using empty style is memory time consuming inside the processor. Instead directly use dailog.getWindow().setLayout(width,height).

In case anyone is wondering how to do it for a dialog shown using DialogFragment, you can override onCreateDialog to return a Dialog with custom style that has windowMinWidthMajor and minor set to 90%

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    return new Dialog(getActivity(), R.style.WideDialog);
}

Style:

<style name="WideDialog" parent="Base.Theme.AppCompat.Dialog">
    <item name="android:windowMinWidthMajor">90%</item>
    <item name="android:windowMinWidthMinor">90%</item>
</style>

Use Relative Layout instead of Linear layout to get full width of Custom Dialog.

In my case width of custom dialog shrinks in size(width) as the content inside dialog becomes smaller in width even though the the width property was set

android:layout_width="match_parent"

I just fixed that width to screen size and now its working according to my requirement

android:layout_width="320dp"

Add code when you want to open dialog

       final Dialog mBottomSheetDialog = new Dialog(getActivity(), R.style.MaterialDialogSheet);

        mBottomSheetDialog.setContentView(R.layout.dialog_mainscreen_filter); // your custom view.
        mBottomSheetDialog.setCancelable(true);
        mBottomSheetDialog.getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        mBottomSheetDialog.getWindow().setGravity(Gravity.BOTTOM);
        mBottomSheetDialog.show();


        ImageView img_cross = mBottomSheetDialog.findViewById(R.id.img_cross);
        final ImageView img_new = mBottomSheetDialog.findViewById(R.id.img_new);
        final ImageView img_Used = mBottomSheetDialog.findViewById(R.id.img_Used);


        img_cross.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mBottomSheetDialog.dismiss();
            }
        });


        img_new.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                img_new.setImageResource(R.drawable.checkbox_tick);
                img_Used.setImageResource(R.drawable.checkbox_tick_gray);
            }
        });
        img_Used.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                img_Used.setImageResource(R.drawable.checkbox_tick);
                img_new.setImageResource(R.drawable.checkbox_tick_gray);
            }
        });

dialog's xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >


    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:cardBackgroundColor="@color/colorWhite"
        app:cardCornerRadius="5dp"
        app:cardElevation="@dimen/margin_10">

        <LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:padding="@dimen/margin_10">

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:text="@string/filter"
                    android:textStyle="bold"
                    android:textColor="@color/colorGreen"
                    android:textSize="@dimen/font_large" />

                <ImageView
                    android:id="@+id/img_cross"
                    android:layout_width="25dp"
                    android:layout_height="25dp"
                    android:layout_alignParentRight="true"
                    android:layout_centerVertical="true"
                    android:src="@drawable/cross" />
            </RelativeLayout>

            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:layout_marginTop="@dimen/margin_20"
                android:background="@color/colorfaintGreen" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/margin_20"
                android:gravity="center_vertical"
                android:orientation="horizontal">

                <ImageView
                    android:id="@+id/img_new"
                    android:layout_width="25dp"
                    android:layout_height="25dp"
                    android:src="@drawable/checkbox_tick" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="@dimen/margin_10"
                    android:text="@string/New"
                    android:textColor="@color/colorText"
                    android:textSize="@dimen/fontsize_normal"
                    android:textStyle="bold" />

                <ImageView
                    android:id="@+id/img_Used"
                    android:layout_width="25dp"
                    android:layout_height="25dp"
                    android:layout_marginLeft="@dimen/margin_30"
                    android:src="@drawable/checkbox_tick_gray" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="@dimen/margin_10"
                    android:text="@string/Used"
                    android:textColor="@color/colorText"
                    android:textSize="@dimen/fontsize_normal"
                    android:textStyle="bold" />

            </LinearLayout>

            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:layout_marginTop="@dimen/margin_20"
                android:background="@color/colorfaintGreen" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/margin_20"
                android:orientation="horizontal">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="00"
                        android:textColor="@color/colorTextGray"
                        android:textSize="@dimen/fontsize_medium"
                        android:textStyle="bold" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="|"
                        android:textColor="@color/colorTextGray"
                        android:textSize="@dimen/fontsize_normal"
                        android:textStyle="bold" />
                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="50"
                        android:textColor="@color/colorTextGray"
                        android:textSize="@dimen/fontsize_medium"
                        android:textStyle="bold" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="|"
                        android:textColor="@color/colorTextGray"
                        android:textSize="@dimen/fontsize_normal"
                        android:textStyle="bold" />
                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="100"
                        android:textColor="@color/colorTextGray"
                        android:textSize="@dimen/fontsize_medium"
                        android:textStyle="bold" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="|"
                        android:textColor="@color/colorTextGray"
                        android:textSize="@dimen/fontsize_normal"
                        android:textStyle="bold" />
                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="200"
                        android:textColor="@color/colorTextGray"
                        android:textSize="@dimen/fontsize_medium"
                        android:textStyle="bold" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="|"
                        android:textColor="@color/colorTextGray"
                        android:textSize="@dimen/fontsize_normal"
                        android:textStyle="bold" />
                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="200+"
                        android:textColor="@color/colorTextGray"
                        android:textSize="@dimen/fontsize_medium"
                        android:textStyle="bold" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="|"
                        android:textColor="@color/colorTextGray"
                        android:textSize="@dimen/fontsize_normal"
                        android:textStyle="bold" />
                </LinearLayout>


            </LinearLayout>

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:layout_marginLeft="22dp"
                    android:layout_marginTop="@dimen/margin_20"
                    android:src="@drawable/filled_green" />

                <SeekBar
                    android:id="@+id/seekbar"
                    style="@style/SeekBarWithoutSteps"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="22dp"
                    android:layout_marginRight="22dp"
                    android:layout_marginTop="@dimen/margin_10"
                    android:max="4"
                    android:maxHeight="@dimen/margin_5"
                    android:minHeight="@dimen/margin_5"
                    android:paddingLeft="@dimen/margin_10"
                    android:paddingRight="@dimen/margin_10"
                    android:progressBackgroundTint="@color/colorGray"
                    android:progressTint="@color/colorGreen"
                    android:theme="@style/Widget.AppCompat.SeekBar.Discrete"
                    android:thumb="@drawable/filled_green"
                    android:thumbOffset="15dp" />


            </RelativeLayout>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:text="@string/search_near_me_in_km"
                android:textColor="@color/colorTextGray"
                android:textSize="@dimen/fontsize_normal"
                android:textStyle="bold" />


            <Button
                android:id="@+id/btn_register"
                android:layout_width="match_parent"
                android:layout_height="@dimen/btn_height"
                android:layout_marginBottom="@dimen/margin_10"
                android:layout_marginTop="@dimen/margin_10"
                android:background="@drawable/btn_bg_green_rounded"
                android:text="@string/submit"
                android:textColor="@color/colorWhite"
                android:textSize="@dimen/fontsize_medium" />

        </LinearLayout>


    </android.support.v7.widget.CardView>
</LinearLayout>

Style.xml ------------------------------------------

     <style name="MaterialDialogSheet" parent="@android:style/Theme.Dialog">
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@android:color/white</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:windowIsFloating">false</item>
        <item name="android:windowAnimationStyle">@style/MaterialDialogSheetAnimation</item>
    </style>


    <style name="MaterialDialogSheetAnimation">
        <item name="android:windowEnterAnimation">@anim/popup_show</item>
        <item name="android:windowExitAnimation">@anim/popup_hide</item>
    </style>

Add Animations in res folder: anim/popup_show.xml

      <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate
            android:duration="300"
            android:fromYDelta="100%p"
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"
            android:toYDelta="0" />
    </set>

anim/popup_hide.xml

        <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate
            android:duration="300"
            android:fromYDelta="0"
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"
            android:toYDelta="100%p" />
    </set>
Dialog dialog = new Dialog(BASE_CONTEXT, R.style.Theme_Dialog);  
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);  
dialog.setContentView(R.layout.your_layout);  
dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
@Override public void onStart() {
    super.onStart();
    Dialog dialog = getDialog();
    if (dialog != null) {
        dialog.getWindow()
                .setLayout((int) (getScreenWidth(getActivity()) * .9), (int)(getScreenHeight(getActivity()) * .6) );
    }
}

public static int getScreenWidth(Activity activity) {
    Point size = new Point();
    activity.getWindowManager().getDefaultDisplay().getSize(size);
    return size.x;
}

public static int getScreenHeight(Activity activity) {
    Point size = new Point();
    activity.getWindowManager().getDefaultDisplay().getSize(size);
    return size.y;
}

example of 90% width and 60% height

Suvarthee Chakravarti
MyDialogFragment myDialogFragment = 
    new MyDialogFragment(activity,arraylist.get(position).getImage());
                                myDialogFragment.show();

Window window = myDialogFragment.getWindow();
        window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!