DolDurma
DolDurma

Reputation: 17289

Android get full width for custom Dialog

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>

Upvotes: 112

Views: 134960

Answers (19)

jenos kon
jenos kon

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>

enter image description here

Upvotes: 2

user15532639
user15532639

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

Deddy Romnan Rumapea
Deddy Romnan Rumapea

Reputation: 654

Just try to wrap your dialog layout in a RelativeLayout

Upvotes: 12

Mpwanyi Samuel
Mpwanyi Samuel

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

Brijesh Kumar
Brijesh Kumar

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

enter image description here

Upvotes: 0

aswathy gopi
aswathy gopi

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

Saeed mohammadi
Saeed mohammadi

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

Abhishek Singh
Abhishek Singh

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

PRATEEK BHARDWAJ
PRATEEK BHARDWAJ

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

mehmoodnisar125
mehmoodnisar125

Reputation: 1529

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

Upvotes: 16

sushildlh
sushildlh

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

Pratibha Sarode
Pratibha Sarode

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

Suvarthee Chakravarti
Suvarthee Chakravarti

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

Amarghosh
Amarghosh

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

Psypher
Psypher

Reputation: 10829

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

Upvotes: 113

Pablo C. Garc&#237;a
Pablo C. Garc&#237;a

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

shehzy
shehzy

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

Hardeep Kumar
Hardeep Kumar

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

Related Questions