Github项目解析(四)-->动态更改TextView的字体大小
来源:互联网 发布:js扩展window方法 编辑:程序博客网 时间:2024/05/16 01:57
最近app开发产品提出了一个需求是,需要动态更改TextView内容字体的大小,比如设定TextView只有一行,宽度只有200dp,内容超过这个之后就缩小字体显示,只能能将字体都显示完全;好吧,其实就是动态更改TextView的字体大小,当TextView的内容比较多时缩小显示,当TextView的内容比较少时正常显示。
自己做的话比较费劲,在晚上找了一圈之后发现了一个比较不错的框架:android-autofittextview
地址:https://github.com/grantland/android-autofittextview
具体的使用方式可以在其github网址上参考;
这里看一下例子展示:
1)当文字字数比较少的时候:
2)当文字字数比较多的时候:
3)当文字字数再多的时候:
可以看出来:当文字没有填充TextView完全时显示的就是默认的字体,当文字能够完全填充TextView并且一行显示不下时,他会默认的缩小文字的字体,当文字再多时,他会默认在末尾省略。。。
原理:
查看该开源项目的具体实现:
里面的AutoTextView就是具体实现动态更改TextView字体大小的组件,大概看了一下源码,主要是自定义TextView并继承系统的TextView,然后在绘制组件的时候根据getMaxLines方法获取内容的行数若内容的行数大于1,则缩小文字的字体,然后在尝试获取getMaxLines方法,若内容的行数还是大于1,则据悉缩小文字的字体,直到内容能够一行显示或者是字体缩小大一定的大小,这时候若缩小到一定的大小还是不能一行显示,则尾部省略。。。
产品中有一个需求是根据TextVIew显示的内容的大小设置字体大小:
// 优惠券金额为三位数时,更改字体大小if (couponAmunt.length() >= 3) { holder.favourItemPriceUnit.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15); holder.favourItemPrice.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 30);} else { holder.favourItemPrice.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 36); holder.favourItemPriceUnit.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);}
在帮TextView控件设置大小的时候,发现和在XML中用PX设置的不一样;由于我们在设置字体大小的时候统一使用的是DP为单位,以前一直以为setTextSize(int size)这里的size参数是以px为单位的,所以这里使用的是setText(dp2px),但是现实的结果一直偏大,后来查询该方法的源码:
/** * Set the default text size to the given value, interpreted as "scaled * pixel" units. This size is adjusted based on the current density and * user font size preference. * * @param size The scaled pixel size. * * @attr ref android.R.styleable#TextView_textSize */ @android.view.RemotableViewMethod public void setTextSize(float size) { setTextSize(TypedValue.COMPLEX_UNIT_SP, size); }才发现这里使用的是SP为单位,所以后来查询了一个它的重载方法:
setTextSize(int unit, int size)
第一个参数可设置如下静态变量:
TypedValue.COMPLEX_UNIT_PX : Pixels
TypedValue.COMPLEX_UNIT_SP : Scaled Pixels
TypedValue.COMPLEX_UNIT_DIP : Device Independent Pixels
2 0
- Github项目解析(四)-->动态更改TextView的字体大小
- 动态更改textview的字体大小
- Android动态更改TextView的字体大小
- 笔记11 | 动态更改TextView的字体大小
- 动态调整TextView字体大小
- Git(四)如何将更改的项目同步到github
- Android 动态改变TextView字体大小
- android 动态设置TextView字体大小
- 动态代码设置Textview的字体大小,引用Dimen资源
- 更改sles10的字体大小
- 更改WebView的字体大小
- 关于Textview在github上的项目
- Android 通过按钮Button更改全部的TextView、EditText、Button的字体大小、字体颜色、背景颜色
- Android 通过按钮Button更改全部的TextView、EditText、Button的字体大小、字体颜色、背景颜色
- 在带(继承)TextView的控件中,在代码中动态更改TextView的文字颜色
- Android中TextView的字体大小
- android 更改TextView中任意位置字体大小和颜色
- TextView字体大小
- AllJoyn开源技术基础概念解析
- UIImageView详解
- iOS开发笔记--检查App更新
- Java 入门 之 集合 Collection
- CodeBlocks运行在Linux Gnome下启用系统终端取代xterm
- Github项目解析(四)-->动态更改TextView的字体大小
- static的作用
- Linux ALSA 声卡驱动之四:Control设备的创建
- iOS开发笔记--使用Auto Layout中的VFL(Visual format language)--代码实现自动布局
- 解决Oracle因安装时未设定字符集导致中文乱码问题
- 聊聊并发(二)——Java SE1.6中的Synchronized
- Java for Web学习笔记(十五):JSP(5)在JSP中使用Java吗?
- iOS开发笔记--使用UITextField自动格式化银行卡号
- Python 列表(list) 总结