Does anybody knows how can I set margins to a custom dialog? I'm asking because I've a custom dialog but when displayed it stretches to fill the parent, even though I set explicitly WRAP_CONTENT on the layout params.
Basically, the dialog contains a listview whose elements must be scrolled down, when the elements are 1 for example, it doesn't stretch, but when more items are added, then the dialog occupies the entire screen.
Any suggestions? I've trying all possible combinations of possible solutions without achieving satisfactory results
EDIT: Added the dialog layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="50dip"
android:orientation="vertical"
android:layout_gravity="top|center">
<FrameLayout android:layout_width="fill_parent" android:layout_margin="5dip" android:layout_height="wrap_content">
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="20sp" android:textColor="@color/black"/>
<Button android:layout_height="32dip" android:layout_width="32dip"
android:id="@+id/guide_dialog_cross_button"
android:background="@drawable/button_cross_white"/>
</FrameLayout>
<ListView android:layout_width="fill_parent" android:layout_height="wrap_content"
android:fadingEdge="none"
android:layout_margin="5dip"/>
<ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_margin="5dip" />
</LinearLayout>
A simple solution that worked for me was to wrap my entire View in another one, and set the margin to which is now the inner View.
Obs: that worked when I wanted margins within my AlertDialog. Not regarding the screen.
Margins don't work for Dialogs, I imagine the top-level window view isn't a layout type that supports margins. I've seen posts saying margins will work when defined as the Dialog's style (rather than on the top-level view element), but this does not seem to work either.
What you need to do to work around the issue is to use an
inset
drawable for your Dialog background, and adjust any padding to account for the background's extra inset. In the example below, I'll just set left & right margins.Dialog background drawable:
Dialog main view:
You may also need to set the background colour of the Dialog itself to transparent. Add a colour resource like so:
And set the window background colour of the dialog to this (note: you can't assign the colour directly, eclipse will complain)
This style should be passed to your Dialog's constructor as the
theme
argument, as innew Dialog(context, R.style.Dialog);
Margin doesnt seem to work on the custom layout for the dialog, but padding works. Try setting the padding on the top level Linear layout.
1) change your main parent layout height
match_content
like below :2) now add style to your styles.xml
3) now add below code to show dialog :
This is a straight-forward, programmatic way to set position and size of my dialog with margins.
I tested my approach for a
DialogFragment
by applying it in theonCreateDialog
method:This is the method applying the margins to the dialog:
Here are the helper methods I used:
The helper methods are explained in another of my SO answers.
This Gist contains an extended versions that supports immersve mode too.
A workaround can be done like this:
`getDeviceMetrics Method: