I'm trying to make a layout like this:

The problem is that I don't want the ListViews to be scrollable. I want them to be as high as they need to and make the whole screen be scrollable. If I set the height of the ListView to wrap_content, that doesn't work. The only way to make it work is to set a specific height - but I don't know how many items will be in the ListView.
I know that I should not put ListView inside ScrollView - but I don't want the ListView to be scrollable, just to show all items.
Maybe there is a better way to make it work?
You Create Custom ListView Which is non Scrollable
public class NonScrollListView extends ListView { public NonScrollListView(Context context) { super(context); } public NonScrollListView(Context context, AttributeSet attrs) { super(context, attrs); } public NonScrollListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec( Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom); ViewGroup.LayoutParams params = getLayoutParams(); params.height = getMeasuredHeight(); } } In Your Layout Resources File
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:fadingEdgeLength="0dp" android:fillViewport="true" android:overScrollMode="never" android:scrollbars="none" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <!-- com.Example Changed with your Package name --> <com.Example.NonScrollListView android:id="@+id/lv_nonscroll_list" android:layout_width="match_parent" android:layout_height="wrap_content" > </com.Example.NonScrollListView> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/lv_nonscroll_list" > <!-- Your another layout in scroll view --> </RelativeLayout> </RelativeLayout> </ScrollView> In Java File
Create a object of your customListview instead of ListView like :
NonScrollListView non_scroll_list = (NonScrollListView) findViewById(R.id.lv_nonscroll_list);
There is no need to use a listview at all.
If you really think about it, a listview can be replaced with a LinearLayout in your case. The Adapter would be the same, however instead of attaching the adapter with your listview, simply call the getView function of the adapter in a for loop on your data and add the retrieved views to your vertical linearlayout.
However this approach is only recommended if you have a small number of items in your list and your display representation of those items is not memory intensive.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With