Android面试题-解决字体适配
来源:互联网 发布:知乎 车枪球 编辑:程序博客网 时间:2024/06/05 00:07
源码分析相关面试题
- Volley源码分析
- 注解框架实现原理
- okhttp3.0源码分析
- onSaveInstanceState源码分析
Activity相关面试题
- 保存Activity的状态
- activity的启动模式原理(一)
- activity的启动模式原理(二)
- activity的启动模式原理(三)
- ActivityRecord TaskRecord和ProcessRecord之间的关系
- service里面startActivity抛异常?activity不会
- 如何退出Activity?如何安全退出已调用多个Activity的Application?
Service相关面试题
- IntentService源码分析
- Service是否在main thread中执行, service里面是否能执行耗时的操作
- service被kill之后怎么让它重启
与XMPP相关面试题
- 与XMPP相关试题一
- 与XMPP相关试题二
与性能优化相关面试题
- 与性能优化相关面试题一
- 与性能优化相关面试题二
- 与性能优化相关面试题三
- 与性能优化相关面试题四
- 与性能优化相关面试题五
- 与性能优化相关面试题六
- 与IPC机制相关面试题
与登录相关面试题
- oauth认证协议原理
- token产生的意义
- 微信扫一扫实现原理
与开发相关面试题
- 迭代开发的时候如何向前兼容新旧接口
- 手把手教你如何解决as jar包冲突
- context的原理分析
- 解决ViewPager.setCurrentItem中间很多页面切换方案
- 创建虚拟机时报错 Please file a bug against Android Studio
- 字体适配
- 键盘弹起挡住输入框
- 机型适配之痛,例如三星、小米、华为、魅族等
与人事相关面试题
- 人事面试宝典
场景一:
开发中经常会遇到这样的情况,某天你心情正好的时候,产品拿着某台设备跑过来告诉你,快看这里的文字显示不下了,开发会说:擦,你这个字太长了啊,当然就显示不下了。然后产品会说:你看iOS是好的,看起来当文字太多的时候,字体变小了。之后Android开发就跑去问iOS开发你这个是怎么做到的,答曰:系统自带的功能,当显示不下时会自动缩小字号。Android开发表示心好累啊,如图:
配置文件:
<TextView android:id="@+id/tv" android:layout_width="200dp" android:layout_height="wrap_content" android:textSize="18sp" android:layout_marginTop="100dp" android:singleLine="true" android:text="Hello World! 字体大小自适应的TextView" />
如上所示发现字体太长默认…
解决方案
private void adjustTvTextSize(TextView tv, int maxWidth, String text) { int avaiWidth = maxWidth - tv.getPaddingLeft() - tv.getPaddingRight() - 10; if (avaiWidth <= 0) { return; } TextPaint textPaintClone = new TextPaint(tv.getPaint()); // note that Paint text size works in px not sp float trySize = textPaintClone.getTextSize(); while (textPaintClone.measureText(text) > avaiWidth) { trySize--; textPaintClone.setTextSize(trySize); } tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, trySize); }
调用如上方法展示效果如下:
当文本过长字体自动缩小,智能适配,宝宝好苦,宝宝不说。
场景二:数据科学家
做个简单的例子,先验证一下:
同样的布局代码
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:text="Hello World! in SP" /><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18dp" android:text="Hello World! in DP" />
调节设置中显示字体大小
运行后显示样式
回到标题要解决的问题,如果要像微信一样,所有字体都不允许随系统调节而发生大小变化,要怎么办呢?利用Android的Configuration类中的fontScale属性,其默认值为1,会随系统调节字体大小而发生变化,如果我们强制让其等于默认值,就可以实现字体不随调节改变,在工程的Application或BaseActivity中添加下面的代码:
@Overridepublic void onConfigurationChanged(Configuration newConfig) { if (newConfig.fontScale != 1)//非默认值 getResources(); super.onConfigurationChanged(newConfig);}@Overridepublic Resources getResources() { Resources res = super.getResources(); if (res.getConfiguration().fontScale != 1) {//非默认值 Configuration newConfig = new Configuration(); newConfig.setToDefaults();//设置默认 res.updateConfiguration(newConfig, res.getDisplayMetrics()); } return res;}
解决方案:
一是布局宽高固定的情况下,字体单位改用dp表示;
二是通过3中的代码设置应用不能随系统调节,在检测到fontScale属性不为默认值1的情况下,强行进行改变。
欢迎关注微信公众号,长期推荐技术文章和技术视频
微信公众号名称:Android干货程序员
0 0
- Android面试题-解决字体适配
- Android面试题之解决篇
- 解决微软面试题
- 面试题解决
- 解决chrome字体不能小于12px (一道简单的面试题)
- 待解决的面试题
- 解决面试题思路总结
- Android面试题
- Android 面试题积累
- android的面试题
- Android面试题
- android 面试题
- Android面试题
- android面试题
- Android面试题
- 转 android面试题
- android面试题总结
- android面试题
- 链表相关的热点面试题(一)
- RSA算法
- 树学习(1)
- matlab下生成随机文件名函数
- 144. Binary Tree Preorder Traversal
- Android面试题-解决字体适配
- 前端框架Vue.js的使用及具体页面跳转时的参数传递
- Android的listView的一级优化
- Android设置全屏方法
- 矩阵快速幂模板
- 原始ajax的基本实现步骤
- AES算法
- Android下的任务和Activity栈(以及taskAffinity属性) (2011-03-08 09:32:05)转载▼
- 正则表达式基础