热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android图文混排,且有ListView,内容已经占满一屏,怎么实现上下滑动

我做的那个页面是Android的图文混排,效果如下:我把ScrollView将最外层的LinearLayout包裹之后页面就运行不出来了,而且ListView的数据只能显示一行。。。。查
我做的那个页面是Android的图文混排,效果如下:

我把ScrollView将最外层的LinearLayout包裹之后页面就运行不出来了,而且ListView的数据只能显示一行。。。。
查资料说,ScrollView和ListView不能同时使用。该怎么做才能实现我这个页面的上下滑动呢?
新手,刚开始Android开发,求大虾们帮忙~

16 个解决方案

#1


另外,我中间的文字是用的两个listView显示的,虽然显示功能实现了,但总感觉怪怪的。。

#2


这个本身页面的逻辑就有问题,从我观察,lz的listview那块的内容应该是固定的吧,或者至少是制式的。制式的用listview意义本来就不是很大,弄成多行的textview即可。这样不就解决了lz的问题。

#3


把这些东西都放到scrollview中

#4


引用 2 楼 icyblood198999 的回复:
这个本身页面的逻辑就有问题,从我观察,lz的listview那块的内容应该是固定的吧,或者至少是制式的。制式的用listview意义本来就不是很大,弄成多行的textview即可。这样不就解决了lz的问题。

不是固定的,是从数据库里动态读取得。
我也不太会布局,只不过弄完之后跟原型图的样子像罢了。。。

#5


引用 3 楼 bdmh 的回复:
把这些东西都放到scrollview中

我测试过,即使单独的把一个ListView放到ScrollView里,ListView中的内容只能显示一行。。。更何况,我在图中的布局用了俩ListView。。。

#6


其实就是scrollview的嵌套问题,你在一开始的时候获取listview单个item的高度然后计算出listview的高度,在代码动态设置下就可以了

#7


上面是解决listview只展示一行的问题,至于scrollview不能滑动你可以试着自定个listview,把onInterceptTouchEvent的返回值改为false 

#8


引用 6 楼 chris_wsy 的回复:
其实就是scrollview的嵌套问题,你在一开始的时候获取listview单个item的高度然后计算出listview的高度,在代码动态设置下就可以了

我原来的ListView的高度设置的是 wrap_content,现在改成了具体的值,测试了一下可以滑动了。。。。
具体怎么动态获取item的高度,然后计算listview的告诉,我再看看。

#9


最简单就是linearLayoyt 使用addView(view),反正不涉及大量数据。通过遍历获取数据,填充到自定义view再add就可以了

#10


引用 4 楼 wlccomeon 的回复:
Quote: 引用 2 楼 icyblood198999 的回复:

这个本身页面的逻辑就有问题,从我观察,lz的listview那块的内容应该是固定的吧,或者至少是制式的。制式的用listview意义本来就不是很大,弄成多行的textview即可。这样不就解决了lz的问题。

不是固定的,是从数据库里动态读取得。
我也不太会布局,只不过弄完之后跟原型图的样子像罢了。。。


我的意思是他的数量上是可控的,可以理解为表格,只不过内容不同罢了,如果每个产品稍有区别,可以利用动态生成linerlayout,然后动态根据数量add进你的view里,就躲避了listview嵌套滚动的问题。

#11


        @Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
通过onMeasure计算呢?

#12


用下拉刷新+自定义适配

#13


用测量来做,高度通过代码去设置,我以前也遇到过,这个高度可以通过代码动态设置,这样的话ListView能完全显示,并且不影响ScrollView的滑动

#14


自定义LISTview 里面加
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int ex = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 4,
MeasureSpec.AT_MOST);

super.onMeasure(widthMeasureSpec, ex);
}
Activity代码里面
public void setListView(ListView lv) {
// 获取ListView对应的Adapter

ListAdapter listAdapter = lv.getAdapter();
if (listAdapter == null) {
return;
}
int Height = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
// listAdapter.getCount()返回数据项的数目
View listItem = listAdapter.getView(i, null, lv);
// 计算子项View 的宽高

listItem.measure(0, 0);
// 统计所有子项的总高度
Height += listItem.getMeasuredHeight();

}
ViewGroup.LayoutParams params = lv.getLayoutParams();
params.height = Height
+ (lv.getDividerHeight() * (listAdapter.getCount() - 1));
// listView.getDividerHeight()获取子项间分隔符占用的高度
// params.height最后得到整个ListView完整显示需要的高度
lv.setLayoutParams(params);

}
添加这个方法固定listview的高度

#15


这样就能滑了 并且不会只显示一行。、

#16


推荐你个网址吧http://blog.csdn.net/qq_21709449/article/details/41210485,你可以看下,有详细的解决方案

推荐阅读
author-avatar
流浪的牛仔2011Ting_883
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有