Android get full width for custom Dialog

AndroidAndroid LayoutAndroid Dialog

Android Problem Overview


in my application my created custom dialog dont have full height and i can not change and customize that.for example see this screen shot:

enter image description here My code:

final Dialog contacts_dialog = new Dialog(ActivityGroup.this, R.style.theme_sms_receive_dialog);
contacts_dialog.setContentView(R.layout.dialog_schedule_date_time);
contacts_dialog.setCancelable(true);
contacts_dialog.setCanceledOnTouchOutside(true);
contacts_dialog.show();

layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layoutRoot"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@null"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/shape_header_dialog_background"
        android:orientation="horizontal"
        android:padding="4dp" >

        <TextView
            android:id="@+id/TextView21"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_marginRight="5dp"
            android:layout_weight="2"
            android:gravity="center_vertical|right"
            android:text="@string/choose_schedule_time_date"
            android:textColor="#ffffff"
            android:textSize="14sp"
            android:textStyle="bold" />

        <ImageView
            android:id="@+id/ImageView03"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_marginTop="0dp"
            android:background="@drawable/icon_scudule_time" />
    </LinearLayout>

</LinearLayout>

Style:

<style name="theme_sms_receive_dialog" parent="android:style/Theme.Dialog">
    <item name="android:windowNoTitle">true</item>
    <item name="android:background">@android:color/transparent</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="numberPickerStyle">@style/NPWidget.Holo.Light.NumberPicker</item>
</style>

Android Solutions


Solution 1 - Android

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

Solution 2 - Android

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.

>

  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();

Solution 3 - Android

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

Solution 4 - Android

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>

Solution 5 - Android

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

Solution 6 - Android

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

Solution 7 - Android

Just try to wrap your dialog layout in a RelativeLayout

Solution 8 - Android

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"

Solution 9 - Android

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

Solution 10 - Android

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>

Solution 11 - Android

@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

Solution 12 - Android

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

Solution 13 - Android

Instead of using custom dialog , use activity class for this. In manifest file specify the style attribute as below

android:theme="@style/AppThemeDialog"

And add AppThemeDialog in style as below

<style name="AppThemeDialog" parent="Theme.AppCompat">

<item name="colorBackgroundFloating">#ff424242</item> <item name="listPreferredItemPaddingLeft">0dp</item> <item name="android:windowIsFloating">true</item> <item name="listPreferredItemPaddingRight">0dp</item> </style>

Solution 14 - Android

Using com.google.android.material.dialog.MaterialAlertDialogBuilder makes everything fun. Here my code

MaterialAlertDialogBuilder(requireContext()).apply {
        setView(layoutInflater.inflate(R.layout.filter_view, null))
        show()
    }

And Result

enter image description here

Solution 15 - Android

For me I have tried this way and it worked for me.

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = DialogPromotionsBinding.inflate(getLayoutInflater());
    
    // Sizing the Dialog
    Rect displayRectangle = new Rect();
    getWindow().getDecorView().getWindowVisibleDisplayFrame(displayRectangle);
    binding.getRoot().setMinWidth((int) (displayRectangle.width() * 0.9f)); // width
    binding.getRoot().setMinHeight((int) (displayRectangle.height() * 0.9f)); // Height
    
   
    setContentView(binding.getRoot());

The nice thing about it is that you can retrieve the percentage from the res files instead of hardcoding them, and set different values based on the device size.

Solution 16 - Android

For kotlin users

    val layoutParams = dialog.window!!.attributes
    layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT
    dialog.window!!.attributes = layoutParams

Or

    val width = resources.displayMetrics.widthPixels
    val height = dialog.window!!.attributes.height
    dailog.window!!.setLayout(width, height)

Solution 17 - Android

This can be considered as a simple hack to set your layout width for example 1000dp and height wrap content like :

<LinearLayout
    android:layout_width="1000dp"
    android:gravity="center"
    android:padding="10dp"
    android:background="@color/colorAccent"
    android:orientation="vertical"     
    android:layout_height="wrap_content">

Solution 18 - Android

You can programatically set a dialog width and height.

dialog = new Dialog(this);
dialog.setContentView(R.layout.dialog_create_subcategory);
dialog.getWindow().setLayout(width, height);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDolDurmaView Question on Stackoverflow
Solution 1 - AndroidAbhishek SinghView Answer on Stackoverflow
Solution 2 - AndroidPsypherView Answer on Stackoverflow
Solution 3 - AndroidHardeep KumarView Answer on Stackoverflow
Solution 4 - AndroidAmarghoshView Answer on Stackoverflow
Solution 5 - AndroidsushildlhView Answer on Stackoverflow
Solution 6 - Androidmehmoodnisar125View Answer on Stackoverflow
Solution 7 - AndroidDeddy RomnanView Answer on Stackoverflow
Solution 8 - AndroidshehzyView Answer on Stackoverflow
Solution 9 - AndroidPRATEEK BHARDWAJView Answer on Stackoverflow
Solution 10 - AndroidPratibha SarodeView Answer on Stackoverflow
Solution 11 - AndroidPablo CegarraView Answer on Stackoverflow
Solution 12 - AndroidSuvarthee ChakravartiView Answer on Stackoverflow
Solution 13 - Androidaswathy gopiView Answer on Stackoverflow
Solution 14 - AndroidBrijesh KumarView Answer on Stackoverflow
Solution 15 - AndroidهيثمView Answer on Stackoverflow
Solution 16 - Androiduser15532639View Answer on Stackoverflow
Solution 17 - AndroidSaeed mohammadiView Answer on Stackoverflow
Solution 18 - AndroidMpwanyi SamuelView Answer on Stackoverflow