Android get full width for custom Dialog
AndroidAndroid LayoutAndroid DialogAndroid 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:
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:
- Add as below in style.xml, alter the value(currently 90%) to meet your needs.
>
- 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
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);