这个适配需求之前工作也适配过,现在项目又要用到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能自适应大小(笔记)相关推荐

  1. android gridview 中图片大小不一,android – Gridview及其图像不适合所有屏幕大小

    正如在我的标题gridview中,图像不适合所有屏幕. 在我的应用程序中,我有15个图像,它是标题,我想在所有屏幕尺寸的3列和5行格式显示它. 但我的Gridview不适合所有屏幕尺寸和图像,标题未正 ...

  2. android gridview自适应高度,Android GridView自适应Item高度

    当GridView外面有ScrollView时, GridView只显示一行Item的高度, 为使GridView跟所有Item高度一致使用这个GridVew替换就可以. public class N ...

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

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

  4. android gridvie item,Android开发―解决自定义GridView高度第一个item高度异常问题

    问题描述: 在写之前,先把问题的图贴出来,问题如下图,GridView的第一个item的自定义高度显示不正常(再次加载之后又正常),不是预设的高度: 解决方法: 首先需要申明,这个GridView 的 ...

  5. Android ScrollView嵌套GridView导致GridView只显示一行item

    Android ScrollView嵌套GridView导致GridView只显示一行item Android ScrollView在嵌套GridView时候,会导致一个问题发生:GridView只显 ...

  6. android gridview教程,Android GridView使用

    一.GridView的设置 android:numColumns="auto_fit" android:columnWidth="90dp" android:s ...

  7. Android GridView属性集合

    Android GridView属性集合 GridView的一些特殊属性: 1.android:numColumns="auto_fit" //GridView的列数设置为自动 2 ...

  8. Android程序对不同手机屏幕分辨率自适应的总结

    各种Android操作系统的手机简直就是琳琅满目,屏幕分辨率的差异可想而知.目前比较主流的有WVGA=800x480,HVGA=480x320,另外的还有QVGA=320x240.当然还有魅族M9的D ...

  9. Android GridView示例

    Android GridView is a ViewGroup that displays items in a two-dimensional, scrollable grid. In this t ...

最新文章

  1. 深入理解Spring的ImportSelector接口
  2. 自定义Activity的启动关闭动画
  3. 来给你20个优秀的......前端轮播图插件
  4. 【转】关于WaterFall瀑布流式布局的性能优化
  5. 循环自相关函数和谱相关密度(三)——实信号、复信号模型下的BPSK信号循环谱MATLAB仿真结果及代码
  6. 如何使用浏览器的F12调试页面?
  7. python时间戳提取小时分钟秒,进行整点判断
  8. 仓库管理员怎样做台账_要求仓管员会做手工台账,手工台账是怎样做的?
  9. oracle项目经验案例,网络工程师简历中的项目经验怎么写
  10. 英语语法总结--形容词和副词
  11. 怎么给计算机D盘分区,C盘分区太大怎么调整分区的大小?
  12. 1597: [Usaco2008 Mar]土地购买
  13. android Wifi热点启动流程,[android]WIFI热点启动流程分析
  14. 如何在scrapy框架里进行调试嘞
  15. 巴西柔术第三课:封闭式防守的降服技术
  16. 计算机保密dss是啥,什么是DSS?
  17. fps游戏通用内存自瞄算法的原理与C++实现
  18. PAT B1032. 挖掘机技术哪家强 (20)
  19. “她经济”作祟医美,美呗如何变美?
  20. cad指北针lisp_CAD指北针

热门文章

  1. 10.COM进程外组件和列集、散集
  2. 台式机下成功在windows10的基础上安装Ubuntu 18.04 LTS 系统(详细教程)
  3. 丁香园开放医疗数据平台,覆盖药、病、诊、科研等7大应用场景
  4. 【二分法】多种情况下的边界条件,区间选择汇总,小结
  5. Avanci许可平台新增SK电讯、华硕电脑和大唐移动三家专利权人
  6. 精彩回顾|Meetup 合肥站--云原生技术沙龙
  7. 关于南京市智慧教育基础平台市区协同推进项目申报工作的通知
  8. 外贸跨境电商必备九款实用APP软件盘点,外贸人必看
  9. 【SSH框架/国际物流商综平台】-01-分三期(仓储管理,货运全流程管理,决策分析)- 项目背景 界面原型 用例图 企业组织结构 功能模块图 系统框架 项目表单收集
  10. 2022-01-08