Reputation: 17289
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>
Upvotes: 112
Views: 134960
Reputation: 564
troubleshoot the issue with your CustomDialog class not taking match_parent width even if it's set in the XML file. Here are some steps and things to check:
1-XML Layout File:
Ensure that in your XML layout file, the root view of your CustomDialog
has the width set to match_parent
.
2-Inflation in CustomDialog
class:
When inflating the layout in your CustomDialog
class, make sure you use the correct layout inflater
. You should use the inflater provided by the Dialog class. Here is an example:
class CustomDialog(context: Context) : Dialog(context, R.style.YourDialogTheme) {
init {
// Inflate the layout using the dialog's LayoutInflater
val inflater = LayoutInflater.from(context)
val contentView = inflater.inflate(R.layout.custom_diyalog, null)
// Set the content view for the dialog
setContentView(contentView)
}}
3-Add Dialog Theme to your styles.xml
file, after add it in your CutomDialog constructor as I did above :
<style name="YourDialogTheme" parent="Theme.AppCompat.Dialog">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:windowMinWidthMajor">100%</item>
<item name="android:windowMinWidthMinor">100%</item>
<item name="android:windowIsFloating">false</item>
Upvotes: 2
Reputation:
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)
Upvotes: 6
Reputation: 1071
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.
Upvotes: 0
Reputation: 654
Just try to wrap your dialog layout in a RelativeLayout
Upvotes: 12
Reputation: 373
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);
Upvotes: -2
Reputation: 1685
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
Upvotes: 0
Reputation: 11
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>
Upvotes: 0
Reputation: 309
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">
Upvotes: -2
Reputation: 9178
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);
Upvotes: 186
Reputation: 2432
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);
Upvotes: 4
Reputation: 1529
Use Relative Layout instead of Linear layout to get full width of Custom Dialog.
Upvotes: 16
Reputation: 9056
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)
.
Upvotes: 18
Reputation: 1849
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>
Upvotes: 2
Reputation: 71
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);
Upvotes: -1
Reputation: 59451
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>
Upvotes: 21
Reputation: 10829
Two ways this can be done, first one in style.xml and second in code:
<style name="Theme_Dialog" parent="android:Theme.Holo.Dialog"> <item name="android:windowMinWidthMajor">90%</item> <item name="android:windowMinWidthMinor">90%</item> </style>
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();
Upvotes: 113
Reputation: 22394
@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
Upvotes: 2
Reputation: 2281
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"
Upvotes: 3
Reputation: 239
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
);
Upvotes: 23