前几天想玩一玩AppBarLayout,没想到遇到在NestedScrollView里不能用listview的问题,即结果无论如何都只能显示一行数据,终于解决了。
想一想,其实这也是在ScrollView嵌套ListView的问题,其实就是滚动的View和另一个滚动的View的嵌套问题。
怕自己忘了,还是写成博客吧。。。。
我们知道,MeasureSpec的specMode一共三种类型:
EXACTLY:一般是设置了明确的值或者是MATCH_PARENT
AT_MOST:表示子布局限制在一个最大值内,一般为WARP_CONTENT
UNSPECIFIED:表示子布局想要多大就多大(很少使用)
将里面的View的onMeasure里面的高设置为最大(AT_MOST)即可解决冲突。
public class MyListView extends ListView {
public MyListView (Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int mExpandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, mExpandSpec);
}
}
只需写一个MyListView继承ListView,重写onMeasure就可以了,然后在NestedScrollView里用MyListView即可,ScrollView也一样。