第一次写东西,内心小紧张,又不知道怎么写,尽量把遇到的问题和解决思路说清楚,写的不好请见谅。
需求
项目有一个需求,很简单,就是一个recyclerview,item里面是两个textview。一个TextView显示的字符串包含圆角、半角和中、英文以及数字。
想起来简单,但是一显示就出问题了。右侧的TextView因为自动换行的问题显示错乱,真不行。至于原因,网上有很多介绍,下面就讲一下解决过程。
解决过程
1.有问题找度娘
和大多数人一样,发现这个问题,立马找百度看看有可以直接用的,大致分为两种:
1)手动拆分字符串:不管是自定义view还是在view预加载时,手动对要显示的字符串进行拆分,添加换行符“\n”后再显示。
2)自定义view,挨个画每个字符,如果排不下就换行
以这两种方式,都找到了可以直接用代码。我还是比较谨慎,先写了demo看了,效果还行,才往项目里写,心想这下总解决了哇,然而高兴得太早了。demo只是给了个TextView,可是项目是RecyclerView,一运行,程序能跑起来的就不错了,还有的直接OOM,于是心灰意冷。
2.求人不如求己
既然百度不到,就只有自己动手了。解决思路采用的是自定义view,挨个画字符。原理很简单,直接上代码:
public class MyTextView extends View {
//内容填充画笔
private Paint contentPaint;
//标准的字体颜色
private String contentNormalColor = "#737373";
//有焦点的字体颜色
private String contentFocuedColor = "#333333";
//控件宽度
private int viewWidth = 0;
//控件高度
private int viewHeight = 0;
//标准的字的样式
public static final int TEXT_TYPE_NORMAL = 1;
//控件获取焦点的时候进行的处理
public static final int TEXT_TYPE_FOCUED = 2;
//默认是标准的样式
private int currentTextType = TEXT_TYPE_NORMAL;
//默认当前的颜色
private String textColor = "#333333";
//字体大小
private int textSize = 40;
//内容
private String mText = "测试的文字信息";
//最小view高度
private float minHeight = 0;
//最小view宽度
private float mi