即动态获取ListView和GridView的高度

一、对于ListView

ListView listview= new ListView(this);

setListViewHeightBasedOnChildren(listview);即可

  1. public static void setListViewHeightBasedOnChildren(ListView listView) {
  2. // 获取ListView对应的Adapter
  3. ListAdapter listAdapter = listView.getAdapter();
  4. if (listAdapter == null) {
  5. // pre-condition
  6. return;
  7. }
  8.  
  9. int totalHeight = ;
  10. for (int i = , len = listAdapter.getCount(); i < len; i++) { // listAdapter.getCount()返回数据项的数目
  11. View listItem = listAdapter.getView(i, null, listView);
  12. listItem.measure(, ); // 计算子项View 的宽高
  13. totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
  14. }
  15.  
  16. ViewGroup.LayoutParams params = listView.getLayoutParams();
  17. params.height = totalHeight
  18. + (listView.getDividerHeight() * (listAdapter.getCount() - ));
  19. // listView.getDividerHeight()获取子项间分隔符占用的高度
  20. // params.height最后得到整个ListView完整显示需要的高度
  21. listView.setLayoutParams(params);
  22. }

二、对于GridView

GridView gridview = new GridView(this);

setGridViewHeightBasedOnChildren(gridview );即可

  1. public static void setGridViewHeightBasedOnChildren(GridView gridView) {
  2. // 获取GridView对应的Adapter
  3. ListAdapter listAdapter = gridView.getAdapter();
  4. if (listAdapter == null) {
  5. return;
  6. }
  7. int rows;
  8. int columns=;
  9. int horizontalBorderHeight=;
  10. Class<?> clazz=gridView.getClass();
  11. try {
  12. //利用反射,取得每行显示的个数
  13. Field column=clazz.getDeclaredField("mRequestedNumColumns");
  14. column.setAccessible(true);
  15. columns=(Integer)column.get(gridView);
  16. //利用反射,取得横向分割线高度
  17. Field horizontalSpacing=clazz.getDeclaredField("mRequestedHorizontalSpacing");
  18. horizontalSpacing.setAccessible(true);
  19. horizontalBorderHeight=(Integer)horizontalSpacing.get(gridView);
  20. } catch (Exception e) {
  21. // TODO: handle exception
  22. e.printStackTrace();
  23. }
  24. //判断数据总数除以每行个数是否整除。不能整除代表有多余,需要加一行
  25. if(listAdapter.getCount()%columns>){
  26. rows=listAdapter.getCount()/columns+;
  27. }else {
  28. rows=listAdapter.getCount()/columns;
  29. }
  30. int totalHeight = ;
  31. for (int i = ; i < rows; i++) { //只计算每项高度*行数
  32. View listItem = listAdapter.getView(i, null, gridView);
  33. listItem.measure(, ); // 计算子项View 的宽高
  34. totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
  35. }
  36. ViewGroup.LayoutParams params = gridView.getLayoutParams();
  37. params.height = totalHeight+horizontalBorderHeight*(rows-);//最后加上分割线总高度
  38. gridView.setLayoutParams(params);
  39. }

(转)解决ScrollView嵌套ListView或者GridView导致只显示一行的方法的更多相关文章

  1. Android——MeasureSpec学习 - 解决ScrollView嵌套ListView和GridView冲突的方法

      原文地址:http://blog.csdn.net/yuhailong626/article/details/20639217   在自定义View和ViewGroup的时候,我们经常会遇到int ...

  2. ScrollView嵌套ListView、GridView,进入页面显示的位置并不是在最顶部,而是在中间部分问题

    在Android项目的开发中,经常会遇到一些布局,可能需要在ScrollView中嵌套ListView或.GridView来实现, 是在使用的过程总又遇到了一个新的问题,就是如果在ScrollView ...

  3. 解决ScrollView嵌套ListView和GridView冲突的方法

    本文摘抄自:http://blog.csdn.net/yuhailong626/article/details/20639217 原文地址:http://blog.csdn.net/yuhailong ...

  4. android中ScrollView嵌套ListView或GridView显示位置问题

    Android中ScrollView中嵌套ListView或GridView时在开始进入界面时总是显示中间位置,开头的位置显示不出来.这种情况下只需要在ScrollView的父控件中添加以下两行代码即 ...

  5. 一键解决ScrollView嵌套ListView仅仅显示一行的问题

    /** * 解决ScrollView嵌套ListView仅仅显示一行的问题 * * @param listView */ private void setListViewHeightBasedOnCh ...

  6. 四种方案解决ScrollView嵌套ListView问题(转)

    以下文章转自@安卓泡面 在工作中,曾多次碰到ScrollView嵌套ListView的问题,网上的解决方法有很多种,但是杂而不全.我试过很多种方法,它们各有利弊. 在这里我将会从使用ScrollVie ...

  7. 四种方案解决ScrollView嵌套ListView问题

    在工作中,曾多次碰到ScrollView嵌套ListView的问题,网上的解决方法有很多种,但是杂而不全.我试过很多种方法,它们各有利弊. 在这里我将会从使用ScrollView嵌套ListView结 ...

  8. 转:四种方案解决ScrollView嵌套ListView问题

    转载自:http://blog.sina.com.cn/s/blog_46798aa80101lxbk.html 原始的连接已经不知道是哪里了,项目中遇到了同样的问题,花了一下午都没有想到是嵌套引起的 ...

  9. 四种方案解决ScrollView嵌套ListView问题[转]

    http://bbs.anzhuo.cn/thread-982250-1-1.html 以下文章转自@安卓泡面 在工作中,曾多次碰到ScrollView嵌套ListView的问题,网上的解决方法有很多 ...

随机推荐

  1. html5 自定义数据属性 ,也就是 data-* 自定义属性---笔记。

    html5  自定义数据属性 ,也就是 data-* 自定义属性.  例如 <div data-last-value="43" data-hidden="true& ...

  2. ef 更新导航属性

    总之,要让所有的东西,都被DbContext管理状态 1.查出来,改了,再提交 2.new 出来,attach,再改,再提交 以上两种都较好理解 3.new出来,改了,再attach,在改状态,再提交 ...

  3. Hya.io – 基于 Web 的数字音频工作站

    Hya.io 是基于 Web 的音频应用程序,通过 Web MIDI ,音频合成器,音序以及大量的插件来支持硬件 MIDI .您可以添加插件到工作区,将其连接到路由音频,进行播放和实验. HYA 支持 ...

  4. iOS- NSDateFormatter (自定义时间格式)

    一. NSDateFormatter解释 1. 日期(NSDate)是NSString类的格式(stringWithFormat),也可以改变输出,如果需要输出年代信息等则需要进行转换,等等. 2.  ...

  5. .net winform程序下使用firefox作为Web浏览器

    在winform程序中,要在程序中展示一个web页面,最常用的就是.net自带的webbrowser,但是大家都知道它是IE,也知道IE是有多么强(er)大(bi).而且微软已经宣布了IE的死亡... ...

  6. 区间合并 --- Codeforces 558D : Gess Your Way Out ! II

    D. Guess Your Way Out! II Problem's Link: http://codeforces.com/problemset/problem/558/D Mean: 一棵满二叉 ...

  7. 重构第6天:降低字段(Push Down Field)

    理解:和提升字段正好相反,跟降低方法类似,就是把基类中,只有部分继承类需要用到的字段,降低到继承类自身去. 详解: 重构前代码: using System; using System.Collecti ...

  8. 【WP8.1】富文本

    之前写过一篇WP8下的富文本的文章,但是写的不是很好,整理了一下,分享一下WP8.1下的富文本处理 富文本处理主要是对表情和链接的处理,一般使用RichTextBlock进行呈现 问题说明: 由于Ri ...

  9. Python入门笔记(26):Python执行环境

    一.python特定的执行环境 在当前脚本继续进行 创建和管理子进程 执行外部命令或程序 执行需要输入的命令 通过网络来调用命令 执行命令来创建需要处理的输出 动态生成Python语句 导入Pytho ...

  10. div模拟实现select下拉框

    <!DOCTYPE html> <html> <head> <title></title> <style type="tex ...