您的位置:首页 > 其它

ScrollView嵌套ListView(GridView同理)

2016-04-13 12:38 323 查看
自定义可适应ScrollView的ListView
    这个方法和上面的方法是异曲同工,方法3是自定义了LinearLayout以取代ListView的功能,但如果我脾气就是倔,就是要用ListView怎么办?那就只好自定义一个类继承自ListView,通过重写其onMeasure方法,达到对ScrollView适配的效果。
    下面是继承了ListView的自定义类:

import android.content.Context;

import android.util.AttributeSet;

import android.widget.ListView;

public class ListViewForScrollView extends ListView {

    public ListViewForScrollView(Context context) {

        super(context);

    }

    public ListViewForScrollView(Context context, AttributeSet attrs) {

        super(context, attrs);

    }

    public ListViewForScrollView(Context context, AttributeSet attrs,

        int defStyle) {

        super(context, attrs, defStyle);

    }

     

//该方法是重点,listview与gridView嵌套在Scrollview中均是覆盖该方法已达到嵌套的目的
    @Override

    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

//在此时计算出listview应有的最大高度,并在onMeasure方法中赋值,使listView展现时即会将全部高度展现出来,而不是只展现出一个屏幕的高度,这样也使得listView失去滑动的效果,因而当你滑动时,完全是在滑动ScrollView。
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,

        MeasureSpec.AT_MOST);

        super.onMeasure(widthMeasureSpec, expandSpec);

    }

}

    三个构造方法完全不用动,只要重写onMeasure方法,需要改动的地方比起方法3少了不是一点半点…
    在xml布局中和Activty中使用的ListView改成这个自定义ListView就行了。代码就省了吧…
    这个方法和方法1有一个同样的毛病,就是默认显示的首项是ListView,需要手动把ScrollView滚动至最顶端。

sv = (ScrollView) findViewById(R.id.act_solution_4_sv);

sv.smoothScrollTo(0, 0);
每次会优先显示第一个listView,调用smoothScrollTo方法,将其滑动到ScrollView顶端即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: