起始需求是TextView能够根据自身宽度自动调整字体大小,有以下链接可以参考
Auto Scale TextView Text to Fit within Bounds
Using auto resize to fit EditText in Android (该文章列出了一些github的项目)
只是在我的项目中表现并不好。
于是考虑自己在代码中通过循环的方式,递减以达到字体大小自适应的效果。
该方法有几个要点:
1. dp <--> px,sp <--> px之间的转换
/** * 将px值转换为dp值 */ public static float px2dp(final Context context, final float px) { return px / context.getResources().getDisplayMetrics().density; } /** * 将dp值转换为px值 */ public static float dp2px(final Context context, final float dp) { return dp * context.getResources().getDisplayMetrics().density; } /** * 将px值转换为sp值,保证文字大小不变 */ public static int px2sp(Context context, float pxValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (pxValue / fontScale + 0.5f); } /** * 将sp值转换为px值,保证文字大小不变 */ public static int sp2px(Context context, float spValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (spValue * fontScale + 0.5f); }
2. 获取控件自身的大小
通过getWidth(in px),或者如gridview,通过 (总宽度-margin-padding)/column 的方式获取,此处命名为itemWidth。
3. 字符串在view中占据空间的计算
参考 How to calculate string font width in pixels
Paint paint = new Paint(); //参数以px为单位 paint.setTextSize(sizeInPX); //得到的结果也是以px为单位 float cursize = paint.measureText(textContent);
4. 循环寻找适配大小
Paint paint = new Paint(); int defaultFontSize = 16; //in sp int finalTextSize = defaultFontSize; String content="anything for test"; paint.setTextSize(sp2px(this, defaultFontSize)); float cursize = paint.measureText(content); // finalTextSize > defaultFontSize/2 这样的限制按需修改 while (cursize > itemWidth && finalTextSize > defaultFontSize/2) { finalTextSize -= 1; Log.w(TAG, "has to change # " + content + " font size # " + finalTextSize); paint.setTextSize(sp2px(this, realTextSize)); cursize = paint.measureText(content); } //现在最终的字体大小已经获取 //此处以textview为例 //需要注意textView setTextSize是以sp为单位的 textView.setTextSize(realTextSize); //如果需要设置padding,那么相应的itemWidth也应该做调整 //textView.setPadding(horizontalMargin, 0, horizontalMargin, 0); textView.setGravity(Gravity.CENTER); ...
相关推荐
动态编辑字体大小类型颜色201510071834.zip 可选多种字体,可设置多种字体颜色。
主要给大家介绍了关于Android如何动态调整应用字体大小的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
android动态更改字体大小 ,通过自定义style,从主题中动态设置app全局字体,通过自定义style,从主题中动态设置app全局字体
仿照微信设置应用字体大小,然后改变整个app的字体。实现仿微信Android中改变字体大小不随系统设置而改变的,扩展一点,安卓 App中的字体独立于系统的设置。
根据给定的长度,自动调整字体的大小,以适应如edit.text,label.caption等这类显示框,希望能帮助更多人.
因用户可能在移动设备的设置中改变字体大小,从而影响我们打包后app的显示界面,因字体大小问题,页面显示不是我们想要的,对比微信、qq等软件发现,大多数都是屏蔽了设置中改变字体大小对app的影响,我将我改后的...
动态设置android webview字体大小的实例
自定义textview字体大小自适应宽度,遇宽变大,遇窄变小
Vue指令可根据元素宽度自动调整字体大小。 它使字体大小在灵活或响应式布局上具有灵活性。 :调整浏览器视口的大小以查看实际效果 安装 通过NPM安装 $ npm install vue-resize-text --save 通过CDN安装 < ...
jQuery响应式动态修改字体大小代码是一款可以在浏览器或容器的尺寸发生改变时动态修改字体的大小,适合于在各种响应式布局中显示文字。
使用Combo Box控件控制字体大小 使用Combo Box控件控制字体大小 使用Combo Box控件控制字体大小
在很多大网站上为了提高用户方便阅读文字,都提供有字体大小选择功能,以适应不同年龄段人群的阅读需求,其实这种功能实现起来也很简单,修改起来也方便,字体大号由你来定,默认字体大小可以CSS页面中定义,一般...
当TextView中字符过多时,会动态的改变字体大小以其适应TextView的大小,不会导致换行显示或超出TextView的宽度
android 改变字体字体和大小,单机按钮来改变字体和大小
VC++实现对话框字体中控件字体大小、字体形状的动态修改
手机自带设置只有三种大小调整,本应用可自行设定改变手机系统字体大小,实现微调设置,可按照自己喜好,慢慢调至为适合自己的完美大小。 给老人们设置超大字体,查看更便捷。给年轻的自己重新设置一个完美字体大小...
今天有人问我,Android系统不同分辨率,不同大小的手机,字体大小怎么去适应呢?其实字体的适应和图片的适应是一个道理的。 一、原理如下: 假设需要适应320×240,480×320分辨率。在res目录下新建文件夹values-...
通过自定义style,从主题中动态设置app全局字体的Demo。
Edittext内容字体大小动态变化 当输入的内容长度过长 字体随之变小