情景 在项目中用到scrollview+tablayout+viewpager+三个fragment.+listview布局;
问题:垂直滑动viewpager展示不全,只展示第一个条目,给viewpager设置固定dp才能显示。但遇到
过长的条目,比如 超过设置的dp值还是无法展示的 scrollview。
上图:
解决思路:
1:尝试给viewpage设置固定高度 dp值。
结果:listview过长无法显示。
2:尝试自定义viewpager:动态计算viewpager高度
public class MyViewPager extends ViewPager {
public MyViewPager(Context context) {
super(context);
}
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int height = 0;
for (int i = 0; i < getChildCount(); i++) {
View child = getChildAt(i);
child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
int h = child.getMeasuredHeight();
if (h > height)
height = h;
}
heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
结果:listview可以滑动但只有一个条目的高度。
3:由于listview展示问题,于是尝试自动测量listview高度动态计算去解决问题,定义自定义listview:
public class NoScrollListview extends ListView{
public NoScrollListview(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* 动态计算高度
*/
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
结果:
经过自定义viewpager+自定义listview动态绘制布局,最终问题解决