- 问题
-
ScrollView 嵌套 ListView 只显示第一行问题
-
布局如下
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ScrollView android:id="@+id/scrollview" android:layout_width="match_parent" android:layout_height="250dp" android:layout_margin="50dp" android:padding="20dp" android:background="@android:color/darker_gray" > <com.deplean.view.MyListView android:id="@+id/lsview" android:layout_width="match_parent" android:layout_height="400dp" android:layout_margin="20dp" android:divider="@android:color/holo_blue_dark" android:dividerHeight="1dp" android:entries="@array/list" /> </ScrollView> </LinearLayout>
- 原因
原因可参考: 测量相关
- 解决方案
-
自定义 ListView,且重写onMeasure
public class MyListView extends ListView { public MyListView(Context context) { super(context); } public MyListView(Context context, AttributeSet attrs) { super(context, attrs); } public MyListView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public MyListView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // TODO Auto-generated method stub int newHeightMeasureSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, // 设计一个较大的值和AT_MOST模式 MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, newHeightMeasureSpec);// 再调用原方法测量 } }
-
结果效果