Android之ScrollView嵌套ListView和GridView冲突的解决方法
程序员文章站
2022-10-09 14:41:42
那么里面的scrollview高度计算就会出现问题。我们也就无法得到想要的效果。核心解决方案: 重写listview或者gridview的onmesure 方法。复制代码...
那么里面的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 ListView与ScrollView冲突的解决方法总结
-
Android开发笔记之 RecyclerView和ScrollView嵌套使用,ListView和ScrollView嵌套使用对比
-
Android解决ScrollView下嵌套ListView和GridView中内容显示不全的问题
-
Android之ScrollView嵌套ListView和GridView冲突的解决方法
-
Android开发笔记之 RecyclerView和ScrollView嵌套使用,ListView和ScrollView嵌套使用对比
-
Android ScrollView与ListView冲突解决_ScrollView内嵌套ListView时禁止ListView的滚动