自定义TextView任意长度文本下自动改变文字大小以完全显示
来源:互联网 发布:ubuntu 16.04 光盘源 编辑:程序博客网 时间:2024/05/29 14:06
前段时间开发了一个新的需求,其中一个列表下有几个文本,根据UI的设计设置了文本大小,开发完成后,在测试中文本显示也没发现异常,后来随着业务的增加,发现部分文本的内容很长,在低分辨率的手机上没法完全显示,而IOS端则没有发现这个问题,一交流,IOS说是他们那边的文本显示能实现自动缩放大小以完全显示。现在琢磨着通过自定义的方式实现文本自动缩放大小以完全显示并充满的功能。
大致思路是:自定义TextView, 重写onDraw方法。在其中获取TextView的宽度以及设定的字体大小,文本内容与边框的距离,TextView中设置的drawableLeft/Right/Top/Buttom,获取欲设置的文本长度,然后再在各项之间逐一匹配。具体如下:
private void adaptivText(String text) { if(TextUtils.isEmpty(text)){ return; } mTextSize = getTextSize();//返回值的单位是px mPaint = new Paint(); mPaint.set(getPaint()); int drawableWidth = 0;//drawableLeft/Right/Top/Buttom文本内容四周的图片宽度 Drawable[] drawableCompound = getCompoundDrawables(); for (int i = 0; i < drawableCompound.length; i++) { if(drawableCompound[i]!= null){ drawableWidth += drawableCompound[i].getBounds().width(); } } //获得当前TextView仅仅是显示文本内容的区域宽度 // TextView总宽度 xml文件中的PaddingLeft 文本内容四周的图片宽度 int maybeWidth = getWidth() - getPaddingLeft() - drawableWidth - // xml文件中的PaddingRight 文本内容四周的图片距离边框的距离 getPaddingRight() - getCompoundDrawablePadding(); float textWidth = mPaint.measureText(text);////text纯文本所占据的宽度 while(textWidth > maybeWidth){ mPaint.setTextSize(--mTextSize); textWidth = mPaint.measureText(text); } //setTextSize() 的单位是sp,因此要转化一次:px ---→ sp this.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSize);}
然后再onDraw方法中supper方法之后调用。
参照网上大佬的经验,经过多次调试修改做了如上优化,有了结果,但内存耗费比较高,部分内容可以提到onLayout方法中操作,以降低内存占用空间,后面再做优化。最后效果图如下:
阅读全文
0 0
- 自定义TextView任意长度文本下自动改变文字大小以完全显示
- 自定义UI-TextView实现文本自动滚动显示
- Android 自动调整 TextView 文字大小仅显示一行
- Android 自定义TextView实现文本内容自动调整字体大小以适应TextView的大小
- Android 自定义TextView实现文本内容自动调整字体大小以适应TextView的大小
- 自动调整textview字体大小以适应textview长度
- 自定义Textview显示自动换行
- Android O新特性之Autosizing TextViews(随着TextView宽高而自动改变文字大小)
- 文本标签随着文本的长度移动显示的Textview
- textview中自动换行显示文本内容
- 自动调整TextView字体大小以适应文字长度
- 自动调整TextView字体大小以适应文字长度&拖动一个角增大textView面积
- 改变文字大小
- android TextView自动滚动以及Java中改变显示内容
- Android Dialog自定义处理类textView文本不显示
- iPhone开发之显示指定格式的文本自动改变UIlabel高度的自定义分类—— 方便好用
- Android前台界面之详解TextView内容任意长度的伸缩、显示与隐藏
- Android文本显示:TextView
- 6-1 PTA 单链表逆转
- Restful API SpringMVC多版本实现
- base64图片压缩
- 链式存储结构的特点
- css控制元素垂直居中的几种方法
- 自定义TextView任意长度文本下自动改变文字大小以完全显示
- Java设计模式(六) 代理模式 vs. 装饰模式
- Windows 日志查看工具
- 改自CSDN提供的markdown编辑器进行详细解答
- 解决Android studio 编译报错 Error:null value in entry: outputDirectory=null
- RedisDesktopManager远程连接失败的解决办法
- ORACLE
- java读取xml时候编码格式报no protocol异常
- IntelliJ IDEA 报错:Error:java: 未结束的字符串文字