看到大家都在说GridView很鸡肋,用的时候简单但是很难解决一些小问题。多聚集在一些四周边框,空隙的问题上。话不多说,先上图。
很神奇吧,这就是GridView经常能遇到的问题,很困扰,有时候让人么直接放弃选择Listview的原因之一。而且搜索网上的答案,有配置xml文件的,有修改的。还有很多可能会提到这两个属性:verticalSpacing/horizontalSpacing,在我使用的过程中,却发现仍旧没有用(上图三是我的目标状态)
先让我们看一下GridView里面一些“特有”属性吧:
android:numColumns /*列数,可以直接指定1列,2列---N列 *auto_fit 自动指定列数:columnWidth和Spacing来计算。比如宽100x,columnWidth为列宽10px,Spacing为间隙5px,那么用总的去除以每一个item的宽,就能得到能放下几行,进行一系列计算。*/
android:columnWidth //每列的宽度,也就是Item的宽度
android:verticalSpacing //竖直间距,行间距
android:horizontalSpacing //水平间距,列间距
(即使设置行间距和列间距为0dp,仍然有可能出现图中的情况)
android:stretchMode /*可以理解缩放模式 columnWidth (列宽缩放) spacingWidth(间隙缩放)当我间隙为0dp,成功的没有显示任意一个item,最重要的一点是没有得到期望的效果*/
android:cacheColorHint="#00000000" //去除拖动时默认的黑色背景 (99%会用到)
android:listSelector="#00000000" //去除选中时的黄色底色 (99%会用到)
android:scrollbars="none" //隐藏GridView的滚动条
android:fadeScrollbars="true" //设置为true就可以实现滚动条的自动隐藏和显示
android:fastScrollEnabled="true" //GridView出现快速滚动的按钮(至少滚动4页才会显示)
android:fadingEdge="none" //GridView衰落(褪去)边缘颜色为空,缺省值是vertical。(可以理解为上下边缘的提示色)
android:fadingEdgeLength="10dip" //定义的衰落(褪去)边缘的长度
android:stackFromBottom="true" //设置为true时,你做好的列表就会显示你列表的最下面
android:transcriptMode="alwaysScroll" //当你动态添加数据时,列表将自动往下滚动最新的条目可以自动滚动到可视范围内
android:drawSelectorOnTop="false" //点击某条记录不放,颜色会在记录的后面成为背景色,内容的文字可见(缺省为false)
就这样子,很开心的没有得到期待的第一张图,内心是拒绝的,是换ListView做,还是自定义GridView做。那么现在给大家一些建议:
①图片使用.png,透明图层的那种,再结合②
② item中的子元素,<ImageView> 等元素宽高设置 xdp (我的是180dp,你的是多少应该能计算出来)该数值,那么为什么是这个数值不是其他数值呢,我们可以得到以下屏幕的宽度来看看
首先该屏幕为1080*1920(px),然后借助这么一句话:以谷歌的标准,按安卓屏幕宽度为例,一般来说480px对应的density是1.5(也就是hdpi)对应320dp,720px对应的density是2.0(也就是xhdpi)对应360dp,1080px对应的density是3.0(也就是xxhdpi)对应360dp ------> 360/2 =180dp (ok,到此基本上我是明白了,也完成了我的目标,那么你的目标呢,同时我们也可以依据实际情况,去使用哪些行间距,列间距以及本身了)
最后,还是一点,手机屏幕正在向120*1280--->1080*1920--->4k 进化,所以设置为指定的肯定是不好的,那么用代码去测量屏幕宽度,进行计算就是解决长期适配的一个方向。或者使用我们常用的包裹内容和匹配父元素标签,去规定我们使用的资源图,以及在drawable的hdpi/mipmap的资源文件夹下下功夫了。
(欢迎评论区研究讨论或者联系我一起学习,转载请注明出处,小王同学祝大家开心)