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