/*** 设置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. python中%是什么意思_python中%代表什么意思?
  2. 机器学习实战笔记(Python实现)-02-k近邻算法(kNN)
  3. 智能运维监管系统终端_城市轨道交通关键设备智能运维系统初步建构
  4. .NET 指南:转换操作符
  5. mysql 5.7 延迟同步_MySQL5.6升级5.7时出现主从延迟问题排查过程
  6. 大数据_Hbase-Filter 索引(优化)_根据column查询---Hbase工作笔记0020
  7. modbus功能码04实例_MODBUS功能码简介
  8. AAC 文件解析及解码流程
  9. 安装黑群晖找不到局域网电脑_黑群晖洗白太复杂?我用蒲公英P5轻松实现
  10. 对接微信公众(开放)平台,获取微信用户信息,实现第三方登录
  11. Win10系统下如何修改电脑名称?windows10更改电脑名称的方法
  12. tp5 对接腾讯云聊天
  13. ElGamal 算法思考
  14. 【北京迅为iMX6ULL】嵌入式学习之Linux系统编程视频教程
  15. 520送女友什么礼物最好、5个适合送给情侣的礼物
  16. UG NX 12 基准平面
  17. 【Unity Shader】屏幕后处理2.0:实现Sobel边缘检测
  18. 免费的Lucene 原理与代码分析完整版下载
  19. 鲁大师linux系统打印机驱动怎么安装,鲁大师安装打印机驱动的具体操作方法
  20. 人工智能必备知识——同济大学线性代数第四章向量组的线性相关性

热门文章

  1. c语言如何实现面向对象编程
  2. SupeSite模块参数说明
  3. Uncaught TypeError: Cannot read properties of undefined (reading ‘Constructo
  4. 华为鸿蒙应用名称填什么,鸿蒙报名这里边的应用名称选啥
  5. MongoDB:一、MongoDB是什么?MongoDB的优缺点
  6. vue若依登录页跳转其他页
  7. 图论的一些事儿 模版
  8. 2022年中国第三方证券APP创新专题分析
  9. bootstrap表格内容居中_bootstrap表单怎么居中
  10. seajs html 缓存,Seajs禁用缓存