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:
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="" 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> 18 Answers
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); 5 Two ways this can be done, first one in style.xml and second in code:
- 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>
- 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(); 5 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 ); 3 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> 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).
Use Relative Layout instead of Linear layout to get full width of Custom Dialog.
0Just try to wrap your dialog layout in a RelativeLayout
1In 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" 1 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
1Add 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="" xmlns:app="" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <android.support.v7.widget.CardView xmlns:android="" xmlns:app="" 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="" 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" 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=""> <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=""> <translate android:duration="300" android:fromYDelta="0" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:toYDelta="100%p" /> </set> For kotlin users
val layoutParams = dialog.window!!.attributes layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT dialog.window!!.attributes = layoutParamsOr
val width = resources.displayMetrics.widthPixels val height = dialog.window!!.attributes.height dailog.window!!.setLayout(width, height) 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); 2 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>
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
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.
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"> 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);