android下activity中多个listview只允许主界面滚动
来源:互联网 发布:齐俊元 知乎 编辑:程序博客网 时间:2024/05/23 20:31
之前发现了自己的APP在处理两个listview时产生的一个bug。当两个listview中的item数量多出手机屏幕时,listview不能显示完全。一开始觉得只要加一个scrollview就可以了,但是后来发现想法是错误的,因为listview本身也是一个scrollview,那么scrollview嵌套scrollview的问题就很麻烦了,到底把滚动权交给谁,结果是哪个listview都不能滚动,后来谷歌了一大圈,终于发现了两个帖子,给我启发:
1 stackoverflow
http://stackoverflow.com/questions/3495890/how-can-i-put-a-listview-into-a-scrollview-without-it-collapsing
2 csdn
http://blog.csdn.net/huangbiao86/article/details/7978149
主要的解决方法,就是禁用listview的滚动条,从而只有一个scrollview的滚动条。那么怎么禁用?或者限定listview的android:layout_width。
网上提供的方法就是在刷新listview之前,计算list item的总的高度,从而设置android:layout_width,那么就可以做到固定高度了。
/*** * 动态设置listview的高度 * * @param listView */ public void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } int totalHeight = 0; for (int i = 0; i < listAdapter.getCount(); i++) { View listItem = listAdapter.getView(i, null, listView); listItem.measure(0, 0); totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() + 1)); listView.setLayoutParams(params); }
虽然这么做了,但是我最后还是发现高度不对,为什么呢?我调试发现,无论item里面的textview不管有几行,item的getMeasreHeight始终是固定值。那么怪不得了,textview的高度无法计算的话,那么高度也还是确定不了。无奈,我只能选择折中,设置textview的属性:
android:sinleline="true"
android:ellipsie="end"
android::layout_width ="wrap_content"
那么设置textview行为固定啦,这样就可以保证高度计算的准确。
至此,bug解完
- android下activity中多个listview只允许主界面滚动
- android下activity中多个listview只允许主界面滚动
- 一个Activity中多个 ListView 只允许主界面滚动
- [转载]android下activity中两个listview只允许主界面滚动
- android 只允许运行一个Activity实例
- android manifest中activity android:windowSoftInputMode。进入界面显示键盘,滚动ListView,键盘消失
- 禁止uiscrollview垂直方向滚动,只允许水平方向滚动;或只允许垂直方向滚动
- 禁止uiscrollview垂直方向滚动,只允许水平方向滚动;或只允许垂直方向滚动
- 禁止UIScrollview垂直方向滚动,只允许水平方向滚动;或只允许垂直方向滚动
- 禁止uiscrollview垂直方向滚动,只允许水平方向滚动;或只允许垂直方向滚动
- 禁止uiscrollview垂直方向滚动,只允许水平方向滚动;或只允许垂直方向滚动
- 禁止UIScrollView垂直方向滚动,只允许水平方向滚动;或只允许垂直方向滚动
- 禁止uiscrollview垂直方向滚动,只允许水平方向滚动;或只允许垂直方向滚动
- 禁止uiscrollview垂直方向滚动,只允许水平方向滚动;或只允许垂直方向滚动
- Android PullToRefreshScrollview+listview 刷新界面的时候滚动到顶部
- Android PullToRefreshScrollview+Listview 刷新界面的时候滚动到顶部
- Android scrollview里面放listview 滚动出现的问题:只滚listview不滚scrollview
- Android scrollview里面放listview 滚动出现的问题:只滚listview不滚scrollview
- jquery选择器空格与大于号、加号与波浪号的区别
- #ifdef的“或”和#ifndef的“与”
- Selenium私房菜系列2 -- XPath的使用
- 我的书房和藏书
- opengl中的视图变换
- android下activity中多个listview只允许主界面滚动
- libMobClickLibrary.a文件引入Xcode5.0工程时候造成错误的问题解决
- Selenium私房菜系列3 -- Selenium API参考手册
- 大话商业智能
- java中的main函数为什么要定义为static的?
- SpringMVC配置
- Uboot中start.S源码的指令级的详尽解析
- 枚举显示设备源码
- Selenium私房菜系列4 -- Selenium IDE的使用