Android GridView如何固定间隔,item能自适应大小(笔记)
这个适配需求之前工作也适配过,现在项目又要用到GridView并更好的适配,不如写个笔记以后也方便使用;
适配需求--item间无论是垂直或者列表间隔固定值dp,然后每个item固定宽度随之适应,如下图:
util代码:
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;
import android.widget.ListAdapter;public class ViewUtils {public static int GRIDVIEW_ITEM = 0x20123456;/*** 设置GridView中item固定垂直和横行间隔宽度item, 然后自适应一行多少个,每个item会自动改大小适应。* * @param convertView item的View* @param parent getview 中的 parent* @param itemWithDp 希望item的大致宽度* @param isSquare item是否是正方形*/public static void setGridViewItemWith(View convertView, ViewGroup parent, int itemWithDp, int hSpacingDp,int vSpacingDp, boolean isSquare) {if (parent instanceof GridView && null == convertView.getTag(GRIDVIEW_ITEM)) {if (0 == parent.getWidth()) {return;}GridView gv = (GridView) parent;float density = gv.getContext().getResources().getDisplayMetrics().density;if (null == gv.getTag(GRIDVIEW_ITEM)) { // GridView只设置一次int parentWith = gv.getWidth() - gv.getPaddingLeft() - gv.getPaddingRight();int count = (int) (parentWith / ((itemWithDp + hSpacingDp) * density));gv.setVerticalSpacing((int) (density * vSpacingDp));gv.setHorizontalSpacing((int) (density * hSpacingDp));if (count <= 0) {count = 1;}gv.setNumColumns(count);gv.setTag(GRIDVIEW_ITEM, count);}if (null == convertView.getTag(GRIDVIEW_ITEM)) { // 一个convertView只设置一次int parentWith = gv.getWidth() - gv.getPaddingLeft() - gv.getPaddingRight();int count = (int) gv.getTag(GRIDVIEW_ITEM);int itemWith = (int) ((parentWith - (density * hSpacingDp) * (count - 1)) / count); // item宽度ViewGroup.LayoutParams l = convertView.getLayoutParams();l.width = itemWith;if (isSquare) {l.height = itemWith;}convertView.setLayoutParams(l);}}}
}
使用:
@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (null == convertView) {convertView = new View(parent.getContext());}// 希望item大概50dp,垂直或者列间隔都为10,item又为正方形ViewUtils.setGridViewItemWith(convertView, parent, 50, 10, 10, true);return convertView;}
再贴上经常用的一个方法,ListView 在 setOnItemClickListener 方便得到item对象:
@SuppressWarnings("unchecked")public static <O> O getItem(AdapterView<?> parent, View view, int position, long id) {O o;if (parent.getAdapter() instanceof HeaderViewListAdapter) {int headerViewsCount = 0;if (view.getParent() instanceof ListView) {ListView listView = (ListView) view.getParent();headerViewsCount = listView.getHeaderViewsCount();}HeaderViewListAdapter headerAdapter = (HeaderViewListAdapter) parent.getAdapter();ListAdapter list = headerAdapter.getWrappedAdapter();position = position - headerViewsCount;o = (O) list.getItem(position);} else { // 没有添加HeaderViewo = (O) parent.getAdapter().getItem(position);}return o;}
使用:
lvList.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {BankCard card = ViewUtil.getitem(parent, view, position, id);}});
Android GridView如何固定间隔,item能自适应大小(笔记)相关推荐
- android gridview 中图片大小不一,android – Gridview及其图像不适合所有屏幕大小
正如在我的标题gridview中,图像不适合所有屏幕. 在我的应用程序中,我有15个图像,它是标题,我想在所有屏幕尺寸的3列和5行格式显示它. 但我的Gridview不适合所有屏幕尺寸和图像,标题未正 ...
- android gridview自适应高度,Android GridView自适应Item高度
当GridView外面有ScrollView时, GridView只显示一行Item的高度, 为使GridView跟所有Item高度一致使用这个GridVew替换就可以. public class N ...
- android gridview设置高度,android设置GridView高度自适应,实现全屏铺满效果
使GridView每个item的高度自适应拉伸,达到整个GridView刚好铺满全屏的效果. public static void setGridViewMatchParent(GridView gr ...
- android gridvie item,Android开发―解决自定义GridView高度第一个item高度异常问题
问题描述: 在写之前,先把问题的图贴出来,问题如下图,GridView的第一个item的自定义高度显示不正常(再次加载之后又正常),不是预设的高度: 解决方法: 首先需要申明,这个GridView 的 ...
- Android ScrollView嵌套GridView导致GridView只显示一行item
Android ScrollView嵌套GridView导致GridView只显示一行item Android ScrollView在嵌套GridView时候,会导致一个问题发生:GridView只显 ...
- android gridview教程,Android GridView使用
一.GridView的设置 android:numColumns="auto_fit" android:columnWidth="90dp" android:s ...
- Android GridView属性集合
Android GridView属性集合 GridView的一些特殊属性: 1.android:numColumns="auto_fit" //GridView的列数设置为自动 2 ...
- Android程序对不同手机屏幕分辨率自适应的总结
各种Android操作系统的手机简直就是琳琅满目,屏幕分辨率的差异可想而知.目前比较主流的有WVGA=800x480,HVGA=480x320,另外的还有QVGA=320x240.当然还有魅族M9的D ...
- Android GridView示例
Android GridView is a ViewGroup that displays items in a two-dimensional, scrollable grid. In this t ...
最新文章
- 深入理解Spring的ImportSelector接口
- 自定义Activity的启动关闭动画
- 来给你20个优秀的......前端轮播图插件
- 【转】关于WaterFall瀑布流式布局的性能优化
- 循环自相关函数和谱相关密度(三)——实信号、复信号模型下的BPSK信号循环谱MATLAB仿真结果及代码
- 如何使用浏览器的F12调试页面?
- python时间戳提取小时分钟秒,进行整点判断
- 仓库管理员怎样做台账_要求仓管员会做手工台账,手工台账是怎样做的?
- oracle项目经验案例,网络工程师简历中的项目经验怎么写
- 英语语法总结--形容词和副词
- 怎么给计算机D盘分区,C盘分区太大怎么调整分区的大小?
- 1597: [Usaco2008 Mar]土地购买
- android Wifi热点启动流程,[android]WIFI热点启动流程分析
- 如何在scrapy框架里进行调试嘞
- 巴西柔术第三课:封闭式防守的降服技术
- 计算机保密dss是啥,什么是DSS?
- fps游戏通用内存自瞄算法的原理与C++实现
- PAT B1032. 挖掘机技术哪家强 (20)
- “她经济”作祟医美,美呗如何变美?
- cad指北针lisp_CAD指北针
热门文章
- 10.COM进程外组件和列集、散集
- 台式机下成功在windows10的基础上安装Ubuntu 18.04 LTS 系统(详细教程)
- 丁香园开放医疗数据平台,覆盖药、病、诊、科研等7大应用场景
- 【二分法】多种情况下的边界条件,区间选择汇总,小结
- Avanci许可平台新增SK电讯、华硕电脑和大唐移动三家专利权人
- 精彩回顾|Meetup 合肥站--云原生技术沙龙
- 关于南京市智慧教育基础平台市区协同推进项目申报工作的通知
- 外贸跨境电商必备九款实用APP软件盘点,外贸人必看
- 【SSH框架/国际物流商综平台】-01-分三期(仓储管理,货运全流程管理,决策分析)- 项目背景 界面原型 用例图 企业组织结构 功能模块图 系统框架 项目表单收集
- 2022-01-08