解决Android布局中ScrollView与ListView的冲突-阿里云开发者社区

开发者社区> 技术小胖子> 正文

解决Android布局中ScrollView与ListView的冲突

简介:
+关注继续查看




看到网上流行的一种使用方法是:

 


  1. Java 代码复制内容到剪贴板  
  2.       
  3. public class Utility {        
  4.     public static void setListViewHeightBasedOnChildren(ListView listView) {        
  5.         ListAdapter listAdapter = listView.getAdapter();        
  6.         if (listAdapter == null) {        
  7.             // pre-condition        
  8.             return;        
  9.         }        
  10.         int totalHeight = 0;        
  11.         for (int i = 0; i < listAdapter.getCount(); i++) {        
  12.             View listItem = listAdapter.getView(i, null, listView);        
  13.             listItem.measure(0, 0);        
  14.             totalHeight += listItem.getMeasuredHeight();        
  15.         }        
  16.         ViewGroup.LayoutParams params = listView.getLayoutParams();        
  17.         params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));        
  18.         listView.setLayoutParams(params);        
  19.     }        
  20. }    
  21.  

这种效果不好而且麻烦。有人的总结如下:

只要在设置ListView的Adapter后调用此静态方法即可让ListView正确的显示在其父ListView的ListItem中。但是要注意的是,子ListView的每个Item必须是LinearLayout,不能是其他的,因为其他的Layout(如RelativeLayout)没有重写onMeasure(),所以会在onMeasure()时抛出异常。

    在ScrollView中嵌套ListView(或者ScrollView)的另外一个问题就是,子ScrollView中无法滑动的(如果它没有显示完全的话),因为滑动事件会被父ScrollView吃掉,如果想要让子ScrollView也可以滑动,只能强行截取滑动事件,有牛人在论坛中发过代码说可以。虽然我没有亲自试过,但估计是可行的。

 于是找到另外两种比较简单的方法,而且又没有影响的

1.在ScrollView中添加一属性 android:fillViewport="true" ,这样就可以让ListView全屏显示了

2.指定ListView的高度 android:layout_height="420dp" ;

 

 

 

个人推荐使用第一种,方便快捷而且能达到效果。



     本文转自06peng 51CTO博客,原文链接:http://blog.51cto.com/06peng/962386,如需转载请自行联系原作者





版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ListView嵌套webView 事件冲突解决
如图,红色部分为WebView,作为ListView头部存在,测试视频(h5)要左右滑动,ListView要上下滑动,保证视频控件和下面评论部分可以显示,但是这个时候就存在WebView横向滑动和ListView竖向滑动之间的冲突。
986 0
【我的Android进阶之旅】解决AndroidStudio编译时报错:Timeout waiting to lock artifact cache .
1、 错误描述 今天在Android Studio中,使用gradle命令的时候,出现了如下所示的错误: D:\GitLab Source\XTCLint>gradlew clean uploadArchives --stacktrace Startin...
4966 0
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
8383 0
android html 与webview属性从冲突
在最近的项目开发中,使用webview加载html页面,这样可以节省大量页面开发的时间,同时也可加快项目进度。 我们需求是需要显示商品评论,页面设计如下:   调用android代码,对于webview的设置如下: webView.
602 0
ScrollView属性fillViewport解决android布局不能撑满全屏的问题
转:http://blog.sina.com.cn/s/blog_6cf2ea6a0102v61f.html   开发项目中遇到一个问题,布局高度在某些国产酷派小屏幕手机上高度不够全部显示,于是使用了ScrollView嵌套LinearLayout,但问题又出现了,在大屏幕手机如三星note3手机上下面会留白,问题的解决办法是在第一层LinearLayout里面嵌套多个LinearLayout,最重要的是将ScrollView中android:fillViewport设置为true。
1405 0
【我的Android进阶之旅】解决Android Studio启动时报错:Java 1.8 or later is required.
错误描述 在公司电脑上运行Android Studio 2.2已经有一段时间了,但是自己的笔记本上还是用的Android Studio 1.5,今天晚上下了一个Android Studio 2.
1325 0
Android 解决Recycler View: Inconsistency detected.
Recycler View: Inconsistency detected. Invalid view holder adapter positionViewHolder 这是android的一个已知bug,可以通过try-catch解决,没有副作用 ...
1116 0
解决Linux无法打开android模拟器问题
笔者最近重新安装了系统(deepin),但随之带来了一个问题,就是无法创建Android模拟器。其实这个问题我倒是在之前遇到过2次,很好解决,删除'yourPath'/Sdk/emulator/lib64/libstdc++.so就行了。
1049 0
21119
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载