/*** 设置GridView居中* 当父目录是RelativeLayout  需要在GridView设置   android:layout_centerHorizontal="true"* 当父目录是LinearLayout    需要在父目录设置  android:gravity="center_horizontal"* @param gridView*/
public static void calGridViewSumWH(GridView gridView) {int numColumns;int horizontalSpacing;try {numColumns = getFieldValue("mRequestedNumColumns", gridView);if (numColumns < 1) return;horizontalSpacing = getFieldValue("mRequestedHorizontalSpacing", gridView);ListAdapter listAdapter = gridView.getAdapter();if (listAdapter == null) return;int totalHeight = 0;int totalWidth = 0;int len = listAdapter.getCount();for (int i = 0; i < len; i++) {View listItem = listAdapter.getView(i, null, gridView);listItem.measure(0, 0);if (i < numColumns)totalWidth+= listItem.getMeasuredWidth();if ((i + 1) % numColumns == 0 && (i + 1) != len) {if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN) {totalHeight += listItem.getMeasuredHeight() + gridView.getVerticalSpacing();} else {totalHeight += listItem.getMeasuredHeight();}}if ((i + 1) == len) {totalHeight += listItem.getMeasuredHeight();}}if (len < numColumns) {gridView.setNumColumns(len);}if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN) {totalWidth = totalWidth + horizontalSpacing * (numColumns - 1);}ViewGroup.LayoutParams params = gridView.getLayoutParams();params.height = totalHeight;params.width = totalWidth;gridView.setLayoutParams(params);} catch (Exception e) {e.printStackTrace();}
}/*** 动态获取属性值* @param attributeName* @param gridView* @return*/
public static int getFieldValue(String attributeName, GridView gridView) {try {Field field = GridView.class.getDeclaredField(attributeName);field.setAccessible(true);return Integer.parseInt(field.get(gridView).toString());} catch (Exception e) {e.printStackTrace();}return 0;
}

然后xml在设置的时候,需要如下设置

<RelativeLayoutandroid:layout_width="130dp"android:layout_height="130dp"><ImageViewandroid:id="@+id/iv_img"android:layout_centerInParent="true"android:maxHeight="130dp"android:maxWidth="130dp"android:layout_width="wrap_content"android:layout_height="wrap_content" />
</RelativeLayout>

因为上述代码测量得到的宽高会受到图片大小的影响,一旦图片大于父容器中设置的130dp,那样子测量得到的宽高也会变动,导致最后展示的效果会有所偏差。

<RelativeLayoutandroid:paddingTop="25dp"android:paddingBottom="25dp"android:background="@android:color/white"android:layout_width="match_parent"android:layout_height="wrap_content"><GridViewandroid:id="@+id/ahgv_qualification"android:verticalSpacing="25dp"android:horizontalSpacing="25dp"android:numColumns="2"android:layout_centerHorizontal="true"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
</RelativeLayout>

动态计算Gridview的高度,宽度,将GridView居中相关推荐

  1. Android 动态计算ListView的高度

    目录 一.简介 二.效果图 三.代码实现 一.简介 在Android开发的过程中有的时候我们需要手动计算ListView的高度,比如说,ScrollView中嵌套ListView的时候,我们就需要手动 ...

  2. android gridview设置高度,android设置GridView高度自适应,实现全屏铺满效果

    使GridView每个item的高度自适应拉伸,达到整个GridView刚好铺满全屏的效果. public static void setGridViewMatchParent(GridView gr ...

  3. iOS开发总结-UITableView 自定义cell和动态计算cell的高度

    UITableView cell自定义头文件: shopCell.h #import <UIKit/UIKit.h> @interface shopCell : UITableViewCe ...

  4. css动态计算元素的高度及宽度

    原文:https://www.cnblogs.com/zhang1f/p/12574774.html 1.px 像素,我们在网页布局中一般都是用px. 2.百分比 百分比一般宽泛的讲是相对于父元素,自 ...

  5. CSS 获取当前可视屏幕高度--使用calc()方法动态计算宽度或者高度

    先了解一下CSS3的相对长度单位和绝对长度单位(参考详细教程) : 相对长度单位 相对长度单位指定了一个长度相对于另一个长度的属性.对于不同的设备相对长度更适用. 单位 描述 em 它是描述相对于应用 ...

  6. iOS 动态计算文本内容的高度

    关于ios 下动态计算文本内容的高度,经过查阅和网上搜素,现在看到的有以下几种方法: 1. //  获取字符串的大小  ios6 - (CGSize)getStringRect_:(NSString* ...

  7. python opencv-4.1.0 cv2.getTextSize()函数 (计算文本字符串的宽度和高度)

    def getTextSize(text, fontFace, fontScale, thickness): # real signature unknown; restored from __doc ...

  8. 【uni-app】动态计算图片高度且保持宽高比

    前言 图片容器宽度已确定 图片加载后,将图片容器按照图片的宽高比设置高度 思路 图片容器宽度已确定. uni-app的image组件,将mode设置为scaleToFill(不保持纵横比缩放图片,使图 ...

  9. 【uni-app】动态计算图片高度

    前言 要求图片加载后,保持宽高比(16:9)且充满图片区 使用uni-app的image组件,将mode设置为scaleToFill(不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素 ...

最新文章

  1. deeplearning量化
  2. python3笔记_python3基础笔记(一)
  3. 利用Github+Jeklly搭建个人博客网站
  4. 逃离 AI 赛道的投资人:做局失利、破局无力
  5. linux常用命令收集(持续中)
  6. 忘记虚拟机root密码的解决办法
  7. jQuery学习入门总结之css()和addClass()的不同
  8. Innovation Factory Open Day
  9. 看的一个pdf说的。。大型网站架构演变
  10. easyui 布局之window和panel一起使用时,拉动window宽高时panel不跟随一起变化
  11. python安装与开发环境搭建_Python安装和开发环境搭建
  12. springboot actuator_Spring Boot之程序性能监控
  13. 数据结构 8-0 排序
  14. 《尚硅谷最新版JavaScript基础全套教程完整版(140集实战教学,JS从入门到精通)》视频1
  15. 通过 jstack 与 jmap 分析一次线上故障
  16. 肠道菌群失调是II型糖尿病和炎症性肠病的标志物
  17. Pro 了,更强了 — 米家台灯 Pro 评测
  18. ISM频段ZigBee传输距离的估算
  19. 基于HDP使用Flume实时采集MySQL中数据传到Kafka
  20. ale_python_interface安装操作

热门文章

  1. supesite 标签调用
  2. Vue 点击table中的某列,带参数跳转到另外一个页面
  3. 21考研初试备考指导
  4. Objective-C introduction
  5. ztree 折叠 CollapseAll函数
  6. CPP-基础:关于多态
  7. 高等数学-极限章节的知识框架图谱
  8. 点石互动--kyw之:Matt Cutts语录
  9. matlab dpd,DPD development expert
  10. getElementById( ) 方法