Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dialog Fragment with wrap_content coming as a full screen. How to make it as a height of layout and not a full screen?

I have created a custom dialog fragment and its xml as follows:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"

    android:padding="5dip" >

    <ListView
        android:id="@+id/product_list"
         android:background="@drawable/border_details"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
         />

    <RelativeLayout
        android:id="@+id/AddtoCart"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginTop="10dp"

        android:background="#005959" >

        <Button
            android:id="@+id/button_addToCart"
            android:layout_width="250dp"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:background="@drawable/gradient_button"
            android:layout_marginTop="2dp"
            android:layout_marginBottom="2dp"
            android:text="@string/add_to_cart"
            android:textColor="#000000" />
    </RelativeLayout>

</RelativeLayout>

When I call this Dialog, it is taking full screen as provided in the screenshot:

ScreenShot

How do I restrict the size of this Dialog to the height of the list and the button?

How do I remove the excess white space?

like image 286
ravindra.kamble Avatar asked Feb 04 '14 06:02

ravindra.kamble


2 Answers

Solved by changing RelativeLayout to LinearLayout and setting weight of list to 1 as follows

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
   android:orientation="vertical"
    android:padding="5dip" >

    <ListView
        android:id="@+id/product_list"
         android:background="@drawable/border_details"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
         />
    <RelativeLayout 
    android:id="@+id/AddtoCart"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:layout_marginTop="10dp"
    android:background="#005959" >

    <Button
        android:id="@+id/button_addToCart"
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_marginBottom="2dp"
        android:layout_marginTop="2dp"
        android:background="@drawable/gradient_button"
        android:text="@string/add_to_cart"
        android:textColor="#000000" />

</RelativeLayout>
</LinearLayout>
like image 60
ravindra.kamble Avatar answered Oct 12 '22 19:10

ravindra.kamble


You have given android:layout_alignParentBottom="true" for the bottom Relative layout so it will take the screen's bottom since the parent relative layout's height is not static.

solution:

  1. You can change the reference for the bottom relative layout to -> align bottom (below) to the list view
  2. Or you can set the bottom layout as the footer for the list view
  3. Or use linear layout vertical instead of the parent relative layout with height as wrap content
  4. Or give static height for the parent relative layout so the bottom relative layout will get the parent relative layout's height and it will be aligned to the parent relative layout's bottom (don't forget to give align top of bottom relative layout to the list view)
like image 13
Tamilselvan Kalimuthu Avatar answered Oct 12 '22 17:10

Tamilselvan Kalimuthu