10

I have created a custom dialog, the code is below. The problem is that, the height of the dialog is becoming wrap_content, i.e it is independent of what ever the height i mention in the xml. I have checked other questions, they din't help me.

public class PointsDialogFragment extends DialogFragment{

    private static final String TAG = PointsDialogFragment.class.getSimpleName();

    public static PointsDialogFragment newInstance(){
        PointsDialogFragment pdf = new PointsDialogFragment();
        Bundle newBundle = new Bundle();
        pdf.setArguments(newBundle);
        return pdf;
    }

    private View mRoot;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        getDialog().requestWindowFeature(STYLE_NO_TITLE);
        mRoot = inflater.inflate(R.layout.fragment_points_dialog, null);
        return mRoot;
    }
}

and the xml for fragment_points_dialog.xml is

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="313dp"
    android:layout_width="fill_parent"
    android:background="@color/green_gradient_start"
>
    <RelativeLayout 
        android:layout_width="173dp"
        android:layout_height="242dp"
        android:background="@drawable/reward_box"
        android:id="@+id/reward_box"
        android:layout_alignParentLeft="true"
    >
        <TextView 
            android:layout_centerInParent="true"
            style="@style/WallSectionHeading"
            android:text="5"
        />
    </RelativeLayout>
    <RelativeLayout 
        android:layout_width="173dp"
        android:layout_height="250dp"
        android:background="@drawable/reward_mascot"
        android:layout_alignParentRight="true"
    >
        <LinearLayout
            android:id="@+id/reward_cloud"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:background="@drawable/reward_cloud"
            android:layout_alignParentBottom="true"
        >
            <TextView
                android:layout_gravity="center_vertical"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="You have gained 5 Delight Points"
                android:textColor="@color/white"
                android:textStyle="italic"
                android:paddingLeft="15dp"
                android:paddingRight="10dp"
            />
        </LinearLayout>

    </RelativeLayout>

</RelativeLayout>

I am showing dialog like this..

PointsDialogFragment pdf = PointsDialogFragment.newInstance();
pdf.show(getFragmentManager(), "dialog");

I would like know a way i can change the height of the dialog with in the dialog fragment.

Yashwanth Kumar
  • 28,931
  • 15
  • 65
  • 69

2 Answers2

17

I think the problem is that when you inflate the View, you're not supplying the ViewParent. When you don't supply that parameter, any "layout_X" parameters in the root of your View will be ignored, as those values are supplied to the parent (which is null in your current situation). What you can do is either supply a ViewParent when inflating or wrap your View XML in another ViewGroup, leaving the absolute layout parameters in the 2nd level.

Sample code: mRoot = inflater.inflate(R.layout.fragment_points_dialog, container, false);

Jason Robinson
  • 31,005
  • 19
  • 77
  • 131
  • mRoot = inflater.inflate(R.layout.fragment_points_dialog, container); whether this answer is correct ??? – Ads Mar 02 '12 at 13:37
2

In your DialogFragment xml, instead of using LinearLayout use a RelativeLayout and set the layout_height to wrap_content it will resize automatically the view.

Make sure to not use align parent bottom otherwise it will fill the screen.

Lilo
  • 2,724
  • 25
  • 16
  • This one works for me. Also make sure that no child views is using match_parent as height so it would not fill the screen. – mariozawa Feb 18 '17 at 08:06