GridView Item 大小可能不一样,如何保持同一行的Item 高度大小相同,且GridView高度自适应!
昨天用到GridView,但是遇到几个问题,就是GridView默认的item其实大小是一致的,但是我们经常会遇到item大小不同,系统默认会留白的问题,很头疼!如下图这样的:
private GridView gv; public AtypeAdapter(GridView gv, Context context, List<AtypeEntity> list) {
this.gv = gv;
this.context = context;
this.data = list;
}
public View getView(int position, View convertView, ViewGroup parent) { Holder holder;
if (convertView == null) {
holder = new Holder();
convertView = View.inflate((Activity) this.context,
R.layout.atype_adpter, null); holder.atype_serial_num = (TextView) convertView
.findViewById(R.id.atype_serial_num);
holder.atype_name = (TextView) convertView
.findViewById(R.id.atype_name);
holder.atype_kusercode = (TextView) convertView
.findViewById(R.id.atype_code);
convertView.setTag(holder);
// 绑定listener监听器,检测convertview的height
holder.update();
} else {
holder = (Holder) convertView.getTag();
} holder.atype_serial_num.setText((position + 1) + "");
holder.atype_name.setText(data.get(position).getAfullname());
holder.atype_kusercode.setText(data.get(position).getAusercode());
// 绑定tag
holder.atype_kusercode.setTag(position);
// 绑定当前的item,也就是convertview
holder.atype_name.setTag(convertView);
return convertView;
} public class Holder {
public TextView atype_serial_num;
public TextView atype_name;
public TextView atype_kusercode; public void update() {
// 精确计算GridView的item高度
atype_kusercode.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
public void onGlobalLayout() {
int position = (Integer) atype_kusercode.getTag();
// 这里是保证同一行的item高度是相同的!!也就是同一行是齐整的 height相等
if (position > 0 && position % 2 == 1) {
View v = (View) atype_name.getTag();
int height = v.getHeight(); View view = gv.getChildAt(position - 1);
int lastheight = view.getHeight();
// 得到同一行的最后一个item和前一个item想比较,把谁的height大,就把两者中 // height小的item的高度设定为height较大的item的高度一致,也就是保证同一 // 行高度相等即可
if (height > lastheight) {
view.setLayoutParams(new GridView.LayoutParams(
GridView.LayoutParams.FILL_PARENT,
height));
} else if (height < lastheight) {
v.setLayoutParams(new GridView.LayoutParams(
GridView.LayoutParams.FILL_PARENT,
lastheight));
}
}
}
});
}
}
- 顶
- 1
- 踩
- 0
GridView Item 大小可能不一样,如何保持同一行的Item 高度大小相同,且GridView高度自适应!的更多相关文章
- RecyclerView实现一个页面有多种item,每个item有多个view,并且可以让任意item的任意view自定义监听,通过接口方法进行触发操作
百度了很多贴子,看着大佬的博客,模仿尝试,最终都是以失败告终,api可能版本不一样, 毕竟博客大佬都是7~8前写的,日期新点的都是好几年前了,多次尝试,还是报出莫名其妙的错. 哎,忧伤. 翻阅各种资料 ...
- Qt之美(一):d指针/p指针详解(解释二进制兼容,以及没有D指针就会崩溃的例子。有了D指针,所使用的对象大小永远不会改变,它就是该指针的大小。这个指针就被称作D指针)good
Translated by mznewfacer 2011.11.16 首先,看了Xizhi Zhu 的这篇Qt之美(一):D指针/私有实现,对于很多批评不美的同路人,暂且不去评论,只是想支持 ...
- du 使用详解 linux查看目录大小 linux统计目录大小并排序 查看目录下所有一级子目录文件夹大小 du -h --max-depth=1 |grep [
常用命令 du -h --max-depth=1 |grep [TG] |sort #查找上G和T的目录并排序 du -sh #统计当前目录的大小,以直观方式展现 du -h --max-d ...
- [Java]获取Window界面的标题栏的高度大小
利用JFrame继承java.awt.Container类的函数getInsets().该函数返回insets类. import java.awt.Insets; import javax.swing ...
- javascript实现限定高度下文字随不同设备自适应改变字体大小至字数完全展示
function fontAutoMoreLine() { let textBox = document.getElementById("iconTxt"); let maxHei ...
- 格式化一个文件的大小(size),或者说是格式化一个app的大小(size)
long number = 6243161; Formatter.formatFileSize(context, number): 需要导包,import android.text.format.Fo ...
- UIScrollView,UICollectionView 和UITableView的属性和方法
UIScrollView,UICollectionView 和UITableView 三者之间的关系:UIScrollView是 UICollectionView 和 UITableView 的父类. ...
- gridView -item 大小调节(dimen-代码引用)
今天在修改一个gridview的时候,发现里面的内容并不会自动适应,填满整个gridview,而是会产生滑动,尝试了很多的方法,包括在item文件中设定width和height,结果,宽度可调,高度却 ...
- UWP VirtualizedVariableSizedGridView 支持可虚拟化可变大小Item的View(二)
上篇UWP VirtualizedVariableSizedGridView 支持可虚拟化可变大小Item的View(一) 讲到该控件的需要和设计过程. 这篇讲讲开发过程中一些重要问题解决. 1.支持 ...
随机推荐
- C# 怎么显示中文格式的日期、星期几
//该语句显示的为英文格式DateTime.Now.DayOfWeek.ToString(); //显示中文格式星期几 "星期" + DateTime.Now.ToString(& ...
- scikit-learn模块学习笔记(数据预处理模块preprocessing)
本篇文章主要简单介绍sklearn中的数据预处理preprocessing模块,它可以对数据进行标准化.preprocessing 模块提供了数据预处理函数和预处理类,预处理类主要是为了方便添加到pi ...
- HDU 2147 kiki's game(博弈图上找规律)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2147 题目大意:给你一个n*m的棋盘,初始位置为(1,m),两人轮流操作,每次只能向下,左,左下这三个 ...
- Python 一些 实用的包(持续更新)
line_profiler:(代码性能分析) 使用方法:链接 codecs:(Python内置的编码库) 数据分析与挖掘领域: 引自博客:这里 因为他有很多这个领域相关的库可以用,而且很好用, ...
- objective-c Quick Reference
- REST API 支持方式
1.JSONPlaceholder 是一个提供免费的在线 REST API 的网站,我们在开发时可以使用它提供的 url 地址测试下网络请求以及请求参数.或者当我们程序需要获取一些假数据.假图片时也可 ...
- thinkphp5.0 配置格式
ThinkPHP支持多种格式的配置格式,但最终都是解析为PHP数组的方式. PHP数组定义 返回PHP数组的方式是默认的配置定义格式,例如: //项目配置文件 return [ // 默认模块名 'd ...
- 牛客网 牛客小白月赛12 B.华华教月月做数学-A^B mod P-快速幂+快速乘
链接:https://ac.nowcoder.com/acm/contest/392/B来源:牛客网 华华教月月做数学 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其 ...
- 转:LNMP虚拟主机PHP沙盒绕过/命令执行(php exec命令被禁之后)
LNMP虚拟主机PHP沙盒绕过/命令执行 lnmp更新1.2版本,很多东西都升级了,很棒.不过还是发现一个BUG. LNMP是一款linux下nginx.php.mysql一键安装包. 下载:http ...
- 洛谷P4071 [SDOI2016] 排列计数 [组合数学]
题目传送门 排列计数 题目描述 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m ...