Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Last row of expandable listview not full view in android

Red mark Row view

Here I uses view and there code as per given below.

 <LinearLayout
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:orientation="vertical">

                            <TableRow
                                android:id="@+id/tab_stone_info"
                                android:layout_width="match_parent"
                                android:layout_height="30dp"
                                android:layout_marginTop="1dp"
                                android:background="@color/styleBreakTabColor"
                                android:weightSum="9">

                                <TextView
                                    android:id="@+id/stone_Type"
                                    android:layout_width="match_parent"
                                    android:layout_height="match_parent"
                                    android:layout_weight="1"
                                    android:background="@drawable/cell_shape"
                                    android:gravity="center"
                                    android:text="@string/Type"
                                    android:textColor="@color/txtStyleBreakup"
                                    android:textSize="12sp" />

                                <TextView
                                    android:id="@+id/stone_Shape"
                                    android:layout_width="match_parent"
                                    android:layout_height="match_parent"
                                    android:layout_weight="1"
                                    android:background="@drawable/cell_shape"
                                    android:gravity="center"
                                    android:text="@string/Shape"
                                    android:textColor="@color/txtStyleBreakup"
                                    android:textSize="12sp" />

                                <TextView
                                    android:id="@+id/stone_Qlty"
                                    android:layout_width="match_parent"
                                    android:layout_height="match_parent"
                                    android:layout_weight="1"
                                    android:background="@drawable/cell_shape"
                                    android:gravity="center"
                                    android:text="@string/Quality"
                                    android:textColor="@color/txtStyleBreakup"
                                    android:textSize="12sp" />

                                <TextView
                                    android:id="@+id/stone_Grade"
                                    android:layout_width="match_parent"
                                    android:layout_height="match_parent"
                                    android:layout_weight="1"
                                    android:background="@drawable/cell_shape"
                                    android:gravity="center"
                                    android:text="@string/Grade"
                                    android:textColor="@color/txtStyleBreakup"
                                    android:textSize="12sp" />

                                <TextView
                                    android:id="@+id/stone_Qty"
                                    android:layout_width="match_parent"
                                    android:layout_height="match_parent"
                                    android:layout_weight="1"
                                    android:background="@drawable/cell_shape"
                                    android:gravity="center"
                                    android:text="@string/Qty"
                                    android:textColor="@color/txtStyleBreakup"
                                    android:textSize="12sp" />

                                <TextView
                                    android:id="@+id/stone_Wt"
                                    android:layout_width="match_parent"
                                    android:layout_height="match_parent"
                                    android:layout_weight="1"
                                    android:background="@drawable/cell_shape"
                                    android:gravity="center"
                                    android:text="@string/Wt"
                                    android:textColor="@color/txtStyleBreakup"
                                    android:textSize="12sp" />

                                <TextView
                                    android:id="@+id/stone_MMSize"
                                    android:layout_width="match_parent"
                                    android:layout_height="match_parent"
                                    android:layout_weight="1"
                                    android:background="@drawable/cell_shape"
                                    android:gravity="center"
                                    android:text="@string/MMSize"
                                    android:textColor="@color/txtStyleBreakup"
                                    android:textSize="12sp" />

                                <TextView
                                    android:id="@+id/stone_Setting"
                                    android:layout_width="match_parent"
                                    android:layout_height="match_parent"
                                    android:layout_weight="1"
                                    android:background="@drawable/cell_shape"
                                    android:gravity="center"
                                    android:text="@string/Setting"
                                    android:textColor="@color/txtStyleBreakup"
                                    android:textSize="12sp" />

                                <TextView
                                    android:id="@+id/stone_SettMode"
                                    android:layout_width="match_parent"
                                    android:layout_height="match_parent"
                                    android:layout_weight="1"
                                    android:background="@drawable/cell_shape"
                                    android:gravity="center"
                                    android:text="@string/SettingMode"
                                    android:textColor="@color/txtStyleBreakup"
                                    android:textSize="12sp" />

                            </TableRow>

                            <RelativeLayout
                                android:id="@+id/layout_tab_stone_info_value"
                                android:layout_width="match_parent"
                                android:layout_height="match_parent"

                               >

                                <com.mindtech.ExpandableHeightListView
                                    android:id="@+id/listviewstone"
                                    android:layout_width="match_parent"
                                    android:layout_height="wrap_content"
                                    android:divider="#00000000"
                                    android:gravity="center"
                                    android:horizontalSpacing="2dp"
                                    android:isScrollContainer="false"
                                    android:stretchMode="columnWidth"
                                    android:verticalSpacing="20dp"
                                     />
                            </RelativeLayout>
                        </LinearLayout>

And I uses epandablelistview as below class.

public class ExpandableHeightListView extends ListView
{

    boolean expanded = false;

    public ExpandableHeightListView(Context context, AttributeSet attrs,
                                    int defStyle)
    {
        super(context, attrs, defStyle);
    }

    public ExpandableHeightListView(Context context)
    {
        super(context);
    }

    public ExpandableHeightListView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }



    public boolean isExpanded()
    {
        return expanded;
    }

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {

//        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
//                MeasureSpec.AT_MOST);

//
//        super.onMeasure(widthMeasureSpec, expandSpec);


//        int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec(
//                Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
//        super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom);
//        ViewGroup.LayoutParams params = getLayoutParams();
//        params.height = getMeasuredHeight();


        if (isExpanded())
        {

            int expandSpec = MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK,
                    MeasureSpec.AT_MOST);
            super.onMeasure(widthMeasureSpec, expandSpec);

            ViewGroup.LayoutParams params = getLayoutParams();
            params.height = getMeasuredHeight();
        }
        else
        {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    }

    public void setExpanded(boolean expanded)
    {
        this.expanded = expanded;
    }
}

I refer this question but did not get correct. Grid of images inside ScrollView

Gridview height gets cut

The main problem occur when first row height is not biger than second or other. if all row content length are same then no issues.

like image 580
Ramchandra Singh Avatar asked Apr 07 '17 11:04

Ramchandra Singh


People also ask

What is ExpandableListView in Android?

android.widget.ExpandableListView. A view that shows items in a vertically scrolling two-level list. This differs from the ListView by allowing two levels: groups which can individually be expanded to show its children. The items come from the ExpandableListAdapter associated with this view.

What is an Expandable List view?

Android ExpandableListView is a view that shows items in a vertically scrolling two-level list. It differs from a ListView by allowing two levels which are groups that can be easily expanded and collapsed by touching to view and their respective children items.

How to get data from ListView by clicking item on ListView?

Try this: my_listview. setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { } });


1 Answers

It looks like you are getting the LayoutParams for your ListView, modifying the height parameter, but you are never calling setLayoutParams to tell the view to use the modified height. Try this:

if (isExpanded()) {

    int expandSpec = MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK,
            MeasureSpec.AT_MOST);
    super.onMeasure(widthMeasureSpec, expandSpec);

    ViewGroup.LayoutParams params = getLayoutParams();
    params.height = getMeasuredHeight();
//Add this line
    setLayoutParams(params);
}

Also, I've ran into problems in the past with the onMeasure() method, not everything is measured when the framework calls that method. You might try a ViewTreeObserver, where you can register a listener to be notified when the full view is laid out, like this:

final LinearLayout layout = (LinearLayout) findViewById(R.id.layout_id);
ViewTreeObserver vto;
if (layout != null) {
    vto = layout.getViewTreeObserver();

    vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            layout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            //Modify your LayoutParams here
        }
    });
}
like image 186
Jason Powell Avatar answered Oct 05 '22 23:10

Jason Powell