Android之ScrollView嵌套ListView和GridView冲突的解决方法
更新时间:2013年09月02日 15:42:20 作者:
由于ListView,GridView本身都继承于ScrollView,一旦在ScrollView中嵌套ScrollView,在ScrollView中嵌套使用ListView或者GridView,ListView只会显示一行多一点。两者进行嵌套,即会发生冲突
那么里面的ScrollView高度计算就会出现问题。我们也就无法得到想要的效果。
核心解决方案: 重写ListView或者GridView的OnMesure 方法。
public class MyListView extends ListView {
public MyListView(Context context) {
super(context);
}
public MyListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
GridView
public class MyGridView extends GridView {
private boolean haveScrollbar = true;
public MyGridView(Context context) {
super(context);
}
public MyGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyGridView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
/**
* 设置是否有ScrollBar,当要在ScollView中显示时,应当设置为false。 默认为 true
*
* @param haveScrollbars
*/
public void setHaveScrollbar(boolean haveScrollbar) {
this.haveScrollbar = haveScrollbar;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (haveScrollbars == false) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
} else {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
}
核心解决方案: 重写ListView或者GridView的OnMesure 方法。
复制代码 代码如下:
public class MyListView extends ListView {
public MyListView(Context context) {
super(context);
}
public MyListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
GridView
复制代码 代码如下:
public class MyGridView extends GridView {
private boolean haveScrollbar = true;
public MyGridView(Context context) {
super(context);
}
public MyGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyGridView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
/**
* 设置是否有ScrollBar,当要在ScollView中显示时,应当设置为false。 默认为 true
*
* @param haveScrollbars
*/
public void setHaveScrollbar(boolean haveScrollbar) {
this.haveScrollbar = haveScrollbar;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (haveScrollbars == false) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
} else {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
}
您可能感兴趣的文章:
- Android ScrollView 下嵌套 ListView 或 GridView出现问题解决办法
- Android中ScrollView嵌套GridView显示不全解决方法
- Android中ScrollView嵌套GridView的解决办法
- Android 中ScrollView嵌套GridView,ListView的实例
- Android 中 GridView嵌套在ScrollView里只有一行的解决方法
- Android开发之机顶盒上gridview和ScrollView的使用详解
- Android编程开发之ScrollView嵌套GridView的方法
- ScrollView嵌套ListView及ListView嵌套的高度计算方法
- Android开发实现ScrollView中嵌套两个ListView的方法
- Android解决ScrollView下嵌套ListView和GridView中内容显示不全的问题
相关文章
Android自定义组合控件之自定义下拉刷新和左滑删除实例代码
最近做了个项目,其中有项目需求,用到下拉刷新和左滑删除,网上没有找到比较理想的解决办法。下面小编给大家分享我的一个小demo有关Android自定义组合控件之自定义下拉刷新和左滑删除实例代码,需要的朋友参考下2016-04-04
Android中利用SurfaceView制作抽奖转盘的全流程攻略
这篇文章主要介绍了Android中利用SurfaceView制作抽奖转盘的全流程,从图案的绘制到转盘的控制再到布局,真的非常全面,需要的朋友可以参考下2016-04-04
Android源码探究之BaseDexClassLoader的使用
今天解决一个插件化问题的时候,竟然发现SO没有正常加载,很怪异,最终排查下来发现竟然是参数传入错误导致的。这就扯到了本文的标题上了,BaseDexClassLoader中的4个参数该如何传入,传入的又是什么呢2022-08-08
Android编程图片加载类ImageLoader定义与用法实例分析
这篇文章主要介绍了Android编程图片加载类ImageLoader定义与用法,结合实例形式分析了Android图片加载类ImageLoader的功能、定义、使用方法及相关操作注意事项,代码中备有较为详尽的注释便于理解,需要的朋友可以参考下2017-12-12


最新评论