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顶端即可。
这个方法和上面的方法是异曲同工,方法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顶端即可。
相关文章推荐
- c语言字符串函数总结(超级全)
- Git详解之六 Git工具
- Java List、Set去重实体对象类型的集合
- Mark一下在模仿团购App搭建页面时犯的低级错误
- 剑指offer 从尾到头打印链表
- CQOI2016 bzoj4519 不同的最小割cuts
- Android handler Thread 修改UI Demo
- 关于android混淆
- Git详解之五 分布式Git
- Tesseract-OCR引擎 入门
- Spark编程指南V1.4.0(翻译)
- ip地址类
- Git详解之四 服务器上的Git
- 获取空间的高度
- 双网卡双ip设置(转载)
- hive安装
- 下午进行就业前的一次培训
- 高流量站点NGINX与PHP-fpm配置优化
- Bencode的编码与解码
- Git详解之三 Git分支