需求: 整个页面外层是套有可滑动ScrollView,中间有动态显示的GridView,用来显示常用的服务Icon,最终效果如下:
该需求支持以下两种特点: 1.最多显示两行文字; 2.多少文字都可以显示得出来,因为字体对应缩小了。
实现过程&遇到的问题:
1.因为GridView和ScrollView的滑动冲突问题,得重写GridView的onMeasure方法,使之支持嵌套在ScollView里面的时候,会直接全部渲染出来,而不用缓存机制。这样做的一个坏处是,如果有超级多item直接加载,会造成UI卡顿。
1 | /** |
2.ItemView里面是由ImageView和TextView组成,我当时想的做法是文字的高度用android:layout_height=”wrap_content”,这样就可以有多少字都可以动态显示多少字出来。若限定高度的话,就会出现文字过多的时候,后面的文字会显示不出来。
但是当我设置wrap_content的时候,文字超长的时候,就会出现如下图两个异常:
(1)异常一: 文字超过两行后,若超长的文字不是在GridView每行的最后一个Item,那么整个布局不会增大,但是文字会叠加到下面的Item上,如下图:
(2) 异常二: 文字超过两行后,若是在没每一行最后一个Item,那么会把整个这一行布局增大,但是最下面一行就会被挤出原先可视部分,此时怎么动态设置GridView的总高度都没用,如下图:
3.解决方法: 为了达到刚开始提的两个需求,目前想到的只能是当某个Item文字超长的时候,动态缩小文字的大小进行适配,处理的方法是利用8.0的兼容方法,用TextView的Autosizeing属性,如下代码,在Item布局的xml里面,加上app命名空间,以及固定TextView的高度,加入自动缩放的属性:
1 | xmlns:app="http://schemas.android.com/apk/res-auto" |
1 | <TextView |
主要就是app:开头的这些属性和maxLine=2,具体效果就是开图的第一张图。
参考文章: https://www.cnblogs.com/plokmju/p/8268005.html
原创文章,欢迎转载,转载请注明:ifish.site
作者:JaydenZhou