重新计算listview高度

来源:互联网 发布:零起点学通c语言要多久 编辑:程序博客网 时间:2024/05/18 17:24
按常理,ScrollView套ListView会存在两个问题:

1.里面的listView高度无法算出来,通常只能显示listview的其中一行
2.listview不能滚动

所以要自定义listview
public class NewListview extends ListView {    public NewListview(Context context)    {        super(context);    }    public NewListview(Context context, AttributeSet attrs)    {        super(context, attrs);    }    public NewListview(Context context, AttributeSet attrs, int defStyle)    {        super(context, attrs, defStyle);    }    @Override    /**     * 重写该方法,达到使ListView适应ScrollView的效果     */    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)    {        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,                MeasureSpec.AT_MOST);//重新计算listview高度        super.onMeasure(widthMeasureSpec, expandSpec);    }}

nMeasure方法是测量view和它的内容,决定measured width和measured height的,这个方法由 measure(int, int)方法唤起,子类可以覆写onMeasure来提供更加准确和有效的测量。
其中两个输入参数:
  widthMeasureSpec
  heightMeasureSpec
  分别是parent提出的水平和垂直的空间要求。
  这两个要求是按照View.MeasureSpec类来进行编码的。
  参见View.MeasureSpec这个类的说明:这个类包装了从parent传递下来的布局要求,传递给这个child。
  每一个MeasureSpec代表了对宽度或者高度的一个要求。
  每一个MeasureSpec有一个尺寸(size)和一个模式(mode)构成。
  MeasureSpecs这个类提供了把一个的元组包装进一个int型的方法,从而减少对象分配。当然也提供了逆向的解析方法,从int值中解出size和mode。
0 0
原创粉丝点击