ScollView嵌套GridView,文字过多时候,会出现底部显示不全

需求: 整个页面外层是套有可滑动ScrollView,中间有动态显示的GridView,用来显示常用的服务Icon,最终效果如下:
ScollView嵌套GridView,文字过多时候,会出现底部显示不全_第1张图片
  该需求支持以下两种特点: 1.最多显示两行文字; 2.多少文字都可以显示得出来,因为字体对应缩小了。

实现过程&遇到的问题:
1.因为GridView和ScrollView的滑动冲突问题,得重写GridView的onMeasure方法,使之支持嵌套在ScollView里面的时候,会直接全部渲染出来,而不用缓存机制。这样做的一个坏处是,如果有超级多item直接加载,会造成UI卡顿。

   /**
    * 重写onMeasure,让该GridView的高度永远是等于其所有item高度之和
    */
   @Override
   protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
       int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
       super.onMeasure(widthMeasureSpec, expandSpec);
   }

2.ItemView里面是由ImageView和TextView组成,我当时想的做法是文字的高度用android:layout_height=“wrap_content”,这样就可以有多少字都可以动态显示多少字出来。若限定高度的话,就会出现文字过多的时候,后面的文字会显示不出来。
但是当我设置wrap_content的时候,文字超长的时候,就会出现如下图两个异常:
(1)异常一: 文字超过两行后,若超长的文字不是在GridView每行的最后一个Item,那么整个布局不会增大,但是文字会叠加到下面的Item上,如下图:
ScollView嵌套GridView,文字过多时候,会出现底部显示不全_第2张图片

(2) 异常二: 文字超过两行后,若是在没每一行最后一个Item,那么会把整个这一行布局增大,但是最下面一行就会被挤出原先可视部分,此时怎么动态设置GridView的总高度都没用,如下图:
ScollView嵌套GridView,文字过多时候,会出现底部显示不全_第3张图片

3.解决方法: 为了达到刚开始提的两个需求,目前想到的只能是当某个Item文字超长的时候,动态缩小文字的大小进行适配,处理的方法是利用8.0的兼容方法,用TextView的Autosizeing属性,如下代码,在Item布局的xml里面,加上app命名空间,以及固定TextView的高度,加入自动缩放的属性:

xmlns:app="http://schemas.android.com/apk/res-auto"


主要就是app:开头的这些属性和maxLine=2,具体效果就是开图的第一张图。

参考文章: https://www.cnblogs.com/plokmju/p/8268005.html

原创文章,欢迎转载,转载请注明:ifish.site

作者:JaydenZhou

你可能感兴趣的:(Android模块)