最近app开发产品提出了一个需求是,需要动态更改TextView内容字体的大小,比如设定TextView只有一行,宽度只有200dp,内容超过这个之后就缩小字体显示,只能能将字体都显示完全;好吧,其实就是动态更改TextView的字体大小,当TextView的内容比较多时缩小显示,当TextView的内容比较少时正常显示。
自己做的话比较费劲,在晚上找了一圈之后发现了一个比较不错的框架:android-autofittextview
地址:https://github.com/grantland/android-autofittextview
具体的使用方式可以在其github网址上参考;
这里看一下例子展示:
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为单位,所以后来查询了一个它的重载方法: