5 控件固定大小_【聊技术】在Android中实现自适应文本大小显示
本周的聊技术话题和大家说说如何在Android中实现自适应文本大小显示。
想象一下,在布局中,通常显示文本的区域大小是固定的,但是文本长度并不总是固定的。比如列表中的文章标题、界面下方的按钮文本等等。
为了尽可能让这些文字可见,传统的做法是通过文本长度设置文本大小,或者通过android:ellipsize属性设置文本省略方式等等。
实际上,从Android O开始,Android API引入了自适应文本大小的简易实现。它不仅可以用于TextView,对于Button等具有文本显示的控件同样适用。通过androidX,还可以适配到低版本的Android中。
下面,我们以TextView为例,来看看如何使用它们吧。
开启自适应显示模式
我们以Empty Activity方式创建一个新的工程,其中默认包含了只显示Hello World!文本的TextView控件,我们为其加上id,并修改尺寸和默认文本。为了兼容低版本的Android设备,使用androidX中提供的的AppCompatTextView替代TextView。
完整的布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><androidx.appcompat.widget.AppCompatTextViewandroid:id="@+id/activity_main_tv"android:layout_width="100dp"android:layout_height="20dp"android:text="abcdefghijklmno"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>
然后,将程序运行起来,可以看到,文字的显示仅到字母“n”处就停止了,“o”并没有显示。显而易见,这是因为文本框的大小限制了文字的显示。
下面,我们来到MainActivity代码,调用setAutoSizeTextTypeWithDefaults();方法,开启自适应缩放。
private AppCompatTextView demoTv;@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);demoTv = findViewById(R.id.activity_main_tv);demoTv.setAutoSizeTextTypeWithDefaults(TextView.AUTO_SIZE_TEXT_TYPE_UNIFORM);
}
重新运行后,可以看到文本被完整地显示出来了:
对于setAutoSizeTextTypeWithDefaults();方法,我们可以传入的参数值通常有两个,分别是TextView.AUTO_SIZE_TEXT_TYPE_UNIFORM和TextView.AUTO_SIZE_TEXT_TYPE_NONE。对应开启自适应文本大小与否。
自定义文本缩放方式
下面,我们修改TextView的文本,继续追加:
android:text="abcdefghijklmnopqrstuvwxyz"
再次运行App,我们发现:无论自适应模式开关与否,都无法完整地显示所有文本。这时候,我们就要对文本大小的自动缩放进行自定义了。
设定缩放配置
首先要介绍一种通过设定缩放配置实现自定义缩放的方法。我们先来看代码:
demoTv.setAutoSizeTextTypeUniformWithConfiguration(4,15,2, TypedValue.COMPLEX_UNIT_SP);
如上代码所示,setAutoSizeTextTypeUniformWithConfiguration();是实现此种缩放方式的关键,它由4个参数构成。
- 4:表示文本缩放的最小值;
- 20:表示文本缩放的最大值;
- 2:表示文本缩放的尝试步长;
- TypedValue.COMPLEX_UNIT_SP:指定前三个参数使用SP作为单位。
可以这样理解,当文本无法显示完全时,系统将以步长为单位递减文本大小设定值,直到文本完全显示,或者尝试值小于给定的文本缩放的最小值。
重新运行App,可以看到文本已经被完整地显示出来了。
定义预设值
自定义缩放的第二种方式是通过定义预设值实现。我们还是直接看代码:
demoTv.setAutoSizeTextTypeUniformWithPresetSizes(new int[]{9, 11, 13, 15}, TypedValue.COMPLEX_UNIT_SP);
通过setAutoSizeTextTypeUniformWithPresetSizes();方法定义预设值,需要两个参数,第一个是预设值的具体数值;第二个则是预设值的单位。
以上面的代码为例,在进行文字缩放时,文字大小只能从9SP,11SP,13SP和15SP这4个值中取。遗憾的是,即使取到9SP,文字依然无法完全显示:
仔细观察图中第二行文字,可以发现文字的下面由于高度不够,被截去了一段。
小结
综上,我们总共讲解了三种文本自动缩放的方式。这三种方式无所谓孰优孰劣,只是使用场景的区别。有了它们,我们无需自己定义不同的文字大小,更无需自己实现文字的自适应缩放了。
最后,特别需要说明:一定要在xml以及java代码中使用AppCompatTextView控件,除非你的App只支持Android O及以上版本。
这次的分享就到这里,希望上述内容对你有所帮助。
5 控件固定大小_【聊技术】在Android中实现自适应文本大小显示相关推荐
- 【聊技术】在Android中实现自适应文本大小显示
本周的聊技术话题和大家说说如何在Android中实现自适应文本大小显示. 想象一下,在布局中,通常显示文本的区域大小是固定的,但是文本长度并不总是固定的.比如列表中的文章标题.界面下方的按钮文本等等. ...
- 微信开发修改button里的字体大小_在微信小程序中如何修改文字大小
这篇文章主要介绍了微信小程序实现点击按钮修改文字大小功能,涉及微信小程序事件绑定及setData动态修改Page页面data数据,进而控制页面元素属性动态改变的相关操作技巧,需要的朋友可以参考下 本文 ...
- android 控件页脚,在布局末尾的android中设置页脚
对开发仪表盘布局的精彩教程. 对于主屏幕页脚在布局结束,但对于其他屏幕坐镇完美,当我试图把它页脚呈现在布局的中间. 我也附上了更好理解的代码. 这是style.xml fill_parent 50dp ...
- android线性布局设置控件固定在底部,Android UI组件LinearLayout线性布局详解
LinearLayout 线性布局,该布局的继承关系: 1. 什么是线性布局 通俗的说感觉起来和线有关,参照线的特点,有么是横向的,要么是竖向的. LinearLayout是线性布局控件,它包含的子控 ...
- 河南税务局网站添加到IE浏览器可信站点中,启用“ActiveX控件和插件”,将安全级别设置为‘中’的具体操作
河南税务局网站http://etax.henan.chinatax.gov.cn/ 添加到IE浏览器可信站点中,启用"ActiveX控件和插件",将安全级别设置为'中'的具体操作 ...
- vue中echarts自适应屏幕大小
vue中echarts自适应屏幕大小,延迟执行 项目中出现echarts适应屏幕大小,有时会遇到不管屏幕大小如何变化echarts图表大小不变的情况:或者出现图表变化延迟的情况,针对这两种情况,分别解 ...
- android调用音量方法,android中获取当前音量大小
android中获取当前音量大小 (2012-11-07 08:40:41) 标签: it 通过程序获取android系统手机的铃声和音量.同样,设置铃声和音量的方法也很简单! 设置音量的方法也很简单 ...
- CSS中的自适应字体大小
本文翻译自:Responsive font size in CSS I've created a site using the Zurb Foundation 3 grid. 我已经使用Zurb Fo ...
- [Android] Eclipse Android中设置模拟器屏幕大小几种方法
在Eclipse Android中设置模拟器屏幕大小是本文要介绍的内容,主要是来了解并学习Eclipse Android中模拟器的设置,具体关于Eclipse Android内容的详解来看本文 . ...
最新文章
- nginx将泛解析的匹配域名绑定到子目录配置方法
- 4月30日或为上半年“最难打车日”
- Openfire 源码部署
- opencv 其他形态学变换
- 面向对象深入:继承03——抽象类
- 《移动App测试实战》——2.2 App UI层面的自动化
- java多态调用优先级_关于java的多态方法调用顺序的问题
- java中堆栈溢出_java – 由于堆栈溢出,C中通常会发生什么?
- oracle ebs po_header_all含税单价,Oracle EBS-追踪PO全过程
- 爱情六十三课,定个开放日
- js中单引号和双引号的区别_python中print函数 以及单引号、双引号、三引号
- 微信小程序云开发教程-微信小程序的JSON配置
- 网页或PDF等复制文本的格式快速规范
- java中一元加号和减号是什么_一元运算符
- python-tkinter使用方法——转载(二)
- 请编程序将china译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。例如:字母A后面4个字母为E,因此,China应译为Glmre。
- pyplot中文手册_matplotlib手册(1)-pyplot使用
- 《北风那个吹》大结局看完了
- 归并排序算法-伪代码
- dataGrip连接clickhouse时,时间字段显示差八小时问题
热门文章
- C++跨类调用——extern
- error C3861: “setw”: 找不到标识符
- 【吐血推荐】领域驱动设计学习输出
- git - 简明指南
- (五)Java工具类ArrayUtils详解
- 深入理解JVM(4)——如何优化Java GC「译」
- Maven入门指南(一)
- 卷积神经网络CNN(Convolutional Neural Networks)没有原理只有实现
- 鸟哥的Linux私房菜(基础篇)- 第十一章、认识与学习 BASH
- OpenCV中SiftDescriptorExtractor