Android之ScrollView嵌套ListView和GridView冲突的解决方法
Android之ScrollView嵌套ListView和GridView冲突的解决方法
发布时间:2016-12-28 来源:查字典编辑
摘要:那么里面的ScrollView高度计算就会出现问题。我们也就无法得到想要的效果。核心解决方案:重写ListView或者GridView的On...

那么里面的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);

}

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新安卓软件开发学习
热门安卓软件开发学习
编程开发子分类