如何让Android TextView(包括子类)的字体大小随着字数的增加而变化,以显示全部内容
来源:互联网 发布:淘宝上卖的觅心猎手 编辑:程序博客网 时间:2024/06/04 23:22
在使用TextView的时候,很多情况下内容的长度是要变化的,字数多了,可能不能显示全部的内容,那如何让TextView在字数超了的时候,能自动缩小字体,或者直接匹配最优的字体大小,使内容全屏并全部显示
代码如下:
protected void autoMatchFont(final TextView view){ view.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { float vWidth = v.getWidth(); //LogUtil.d("vWidth=" + vWidth); TextPaint paint = view.getPaint(); String text = view.getText().toString(); float textLen = paint.measureText(text); //LogUtil.d("textLen=" + textLen); float oldSize = view.getTextSize(); //LogUtil.d("oldSize=" + oldSize); if (textLen != vWidth && isNeedAdapta){ isNeedAdapta = false; float size = vWidth * oldSize / textLen; //LogUtil.d("size=" + size); view.setTextSize(TypedValue.COMPLEX_UNIT_PX, size); } } }); }
方法已经封装好了,传入TextView对象即可,原理很简单:
1.float textLen = paint.measureText(text);//计算当前显示的内容,用当前的字体(paint是通过view.getPaint()得到的,包含了当前view的字体信息)计算全部内容的宽度
2.float vWidth = v.getWidth();//得到当前的组件宽度
3.textLen 和vWidth 比较,内容的宽度大于组件宽度,则会换行或者显示不全,反之可推
4.view.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);设置字体大小时,必须以TypedValue.COMPLEX_UNIT_PX的类型设置,这是为了匹配view.getTextSize(),因为这个方法得到的字体也是以px为单位的,而view.setTextSize(size)默认是以sp为单位
要注意的是,组件的宽度必须在OnLayoutChangeListener里面获取,否则为0
阅读全文
0 0
- 如何让Android TextView(包括子类)的字体大小随着字数的增加而变化,以显示全部内容
- Android如何让TextView子元素随着父元素的背景变化而改变字体颜色?
- 让div的大小随着内容的变化而变化
- Android 一行显示全部内容的TextView--SingleLineTextView
- android设置textview限制字数以省略号显示的方法
- iOS UILabel的高度随着字数的多少变化而变化
- android开发之当设置textview多少字后以省略号显示。限制TextView的字数
- 固定Textview,字体随着字数的多少字体动态变化大小
- 内容随着显示器的变化而变化
- android TextView 显示字数的限制问题
- android TextView 每行字数显示的问题
- Android开发之App字体大小不随着系统字体大小的改变而改变
- 让提示小View随着按钮或者label的移动而移动,长短随着文字的长短而变化
- 如何保持你的App中的字体大小不随手机系统的字体大小变化而变化
- 计算cell的高度,让cell的高度随填充的文本字数变化而变化
- Android APP字体大小,不随系统的字体大小变化而变化的方法
- APP字体大小,不随系统的字体大小变化而变化
- 让 Toolbar 随着 RecyclerView 的滚动而显示/隐藏(Part 1)
- Servlet(4)—一个简单的Servlet实例
- 使用 Navicat_premium 将 oracle 数据库迁移到 mysql
- Ueditor设置虚拟路径上传图片详解
- 面试体记录第四节——(handler)
- Timer Scheduler API参数详解
- 如何让Android TextView(包括子类)的字体大小随着字数的增加而变化,以显示全部内容
- 用C++实现HTTP服务器
- DataBinding基本使用(5)
- 【转】抓包工具Charles的使用心得
- STM32输出比较模式和PWM模式
- 开始记录深度学习工作站的学习之路
- Retrofit2高级教程 一 CompositeDisposable是否能够真的中断订阅
- QT中PRO文件写法的详细介绍,很有用,很重要!
- iOS UITableView~members(常用成员方法)