Android进阶之路 - 字体自适应

这篇具有很好参考价值的文章主要介绍了Android进阶之路 - 字体自适应。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开发中有很多场景需要进行自适应适配,但是关于这种字体自适应,我也是为数不多的几次使用,同时也简单分析了下源码,希望我们都有收获

很多时候控件的宽度是有限的,而要实现比较好看的UI效果,常见的处理方式应该有以下几种

  • 默认执行多行显示
  • 单行显示,不足部分显示…
  • 自适应字体

静态设置

宽度是有限的,内部文字会根据配置进行自适应

Android进阶之路 - 字体自适应

TextView 自身提供了自适应的相关配置,可直接在layout中进行设置

主要属性

  • maxLines="1"
  • autoSizeMaxTextSize
  • autoSizeMinTextSize
  • autoSizeTextType
  • autoSizeStepGranularity
    <TextView
        android:id="@+id/tv_text3"
        android:layout_width="50dp"
        android:layout_height="40dp"
        android:layout_marginTop="10dp"
        android:autoSizeMaxTextSize="18sp"
        android:autoSizeMinTextSize="10sp"
        android:autoSizeStepGranularity="1sp"
        android:autoSizeTextType="uniform"
        android:gravity="center"
        android:maxLines="1"
        android:text="自适应字体" />

源码:自定义属性

Android进阶之路 - 字体自适应


动态设置

 // 设置自适应文本默认配置(基础配置)
 TextViewCompat.setAutoSizeTextTypeWithDefaults(textView, TextView.AUTO_SIZE_TEXT_TYPE_UNIFORM)
 // 主动设置自适应字体相关配置
 TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(textView, 20, 48, 2, TypedValue.COMPLEX_UNIT_SP)

源码分析

如果你有时间,也有这方面的个人兴趣,可以一起分享学习一下

setAutoSizeTextTypeWithDefaults

根据源码来看的话,内部做了兼容处理,主要是设置自适应文本的默认配置

Android进阶之路 - 字体自适应

默认配置方法主要根据不同类型设置自适应相关配置,默认有AUTO_SIZE_TEXT_TYPE_NONE or AUTO_SIZE_TEXT_TYPE_UNIFORM ,如果没有设置的话就会报 IllegalArgumentException 异常

  • AUTO_SIZE_TEXT_TYPE_NONE 清除自适应配置
  • AUTO_SIZE_TEXT_TYPE_UNIFORM 添加一些默认的配置信息

Android进阶之路 - 字体自适应


setAutoSizeTextTypeUniformWithConfiguration

根据源码来看主传4个参数,内部也做了兼容处理,注明 Build.VERSION.SDK_INT>= 27 or 属于 AutoSizeableTextView 才能使用文字自定义适配

  • textView 需进行自适应的控件
  • autoSizeMinTextSize 自适应自小尺寸
  • autoSizeMaxTextSize 自适应自大尺寸
  • autoSizeStepGranularity 自适应配置
  • unit 单位,如 sp(字体常用)、px、dp

Android进阶之路 - 字体自适应

unit 有一些常见的到单位,例如 dp、px、sp等

Android进阶之路 - 字体自适应文章来源地址https://www.toymoban.com/news/detail-477563.html

到了这里,关于Android进阶之路 - 字体自适应的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android进阶之路 - ViewPager2 比 ViewPager 强在哪?

    我记得前年(2022)面试的时候有被问到 ViewPager 和 ViewPager2 有什么区别?当时因为之前工作一直在开发售货机相关的项目,使用的技术要求并不高,所以一直没去了解过 ViewPager2~ 去年的时候正好有相关的功能需求,索性直接用 ViewPager2 进行了 Tip :很多人可能比较关注俩者区

    2024年02月20日
    浏览(34)
  • Android进阶之路 - 通过Gradle 窗口、插件、命令 查看项目依赖

    最近在处理一个依赖冲突的问题,虽然根据错误提示已经解决了问题;但还是很有必要了解一下 如何查看项目中各模块的依赖组件 ,以便于快速解决组件依赖的问题,故特记录于此 在实战中我们一般可以通过 Gradle窗口 、 Gradle插件 、以及 Terminal 执行Gradle相关命令 获取项目

    2024年02月04日
    浏览(29)
  • 学习之路 会有很多失败

    大家知道 pyhackrf 连一个示例写法都没有  我已经很努力了  努力得到了回报  终于让pyhackrf 正常工作了   发送后波形已经正常 非常感谢大家的鼓励和支持  谢谢大家点赞    我会继续下去  把那些隐藏在软件内的秘密一一的挖出来   让大家也能学到

    2024年01月22日
    浏览(29)
  • Android-高级-UI-进阶之路(四)-Paint-渲染-滤镜-xfermode-使用

    class MyGradientView : View { private var mPaint: Paint? = null private var mBitMap: Bitmap? = null private var mWidth: Int = 0 private var mHeight: Int = 0 private val mColors = intArrayOf(Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW) constructor(context: Context?) : super(context) { init() } constructor(context: Context?, attrs: AttributeSet?) : super(

    2024年04月16日
    浏览(29)
  • Android-高级-UI-进阶之路-(七)-SVG-基础使用-+-绘制中国地图

    输入搜索动画 利用在线绘制 SVG 图标网站 制作搜索图标 可以自己随意捣鼓绘制,绘制好了之后点击视图-源代码,将 SVG 代码复制出来保存成 search_svg.xml 在线转换 svg2vector 点击空白或者直接将 SVG 拖拽指定区域进行转换 将转换好的 Android 格式的 vector 导入 AS 开始制作动画关联

    2024年03月20日
    浏览(36)
  • Android高级UI进阶之路(七)——SVG基础使用(绘制中国地图)

    Android高级UI进阶之路(一) —— View的基础知识 Android高级UI进阶之路(二) —— 深入理解Android8.0 View的触摸事件分发机制 Android高级UI进阶之路(三) —— 理解View的工作原理及自定义View入门 Android高级UI进阶之路(四) —— Paint渲染滤镜xfermode使用 Android高级UI进阶之路(五) —— Canva

    2024年02月05日
    浏览(28)
  • Android-高级-UI-进阶之路-(二)-深入理解-Android-8-0-View-触摸事件分发机制,查漏补缺

    我们看到内部又调用了父类 dispatchTouchEvent 方法, 所以最终是交给 ViewGroup 顶级 View 来处理分发了。 顶级 View 对点击事件的分发过程 在上一小节中我们知道了一个事件的传递流程,这里我们就大致在回顾一下。首先点击事件到达顶级 ViewGroup 之后,会调用自身的 dispatchTouchE

    2024年04月14日
    浏览(58)
  • Android-高级-UI-进阶之路-(五)-看完该篇文章-Canvas-你应该会了

    /** 1. 绘制椭圆 */ canvas.drawOval(RectF(100f,500f,600f,800f),mPaint) /** 2. 绘制圆 */ mPaint.setColor(Color.YELLOW) mPaint.alpha = 100 canvas.drawCircle(400f,400f,200f,mPaint) 绘制 Bitmap // val bitmap = BitmapFactory.decodeResource(context.resources, R.mipmap.gild_3) //第二个,第三个参数代表起点位置 canvas.drawBitmap(bitmap,100f,100

    2024年03月28日
    浏览(42)
  • Unity中级客户端开发工程师的进阶之路

    上期 UWA技能成长系统 之《Unity高级客户端开发工程师的进阶之路》得到了很多Unity开发者的肯定。通过系统的学习,可以掌握游戏性能瓶颈定位的方法和常见的CPU、GPU、内存相关的性能优化方法。 UWA技能成长系统是UWA根据学员的职业发展目标,提供技能学习的推荐路径,再将

    2024年02月12日
    浏览(33)
  • Android-高级-UI-进阶之路-(七)-SVG-基础使用-+-绘制中国地图,Android面试中常问的MMAP到底是啥东东

    iv.setImageDrawable(animatedVectorDrawable) val animatable = iv.drawable as Animatable animatable.start() } } 输入搜索动画 利用在线绘制 SVG 图标网站 制作搜索图标 可以自己随意捣鼓绘制,绘制好了之后点击视图-源代码,将 SVG 代码复制出来保存成 search_svg.xml 在线转换 svg2vector 点击空白或者直接将

    2024年04月25日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包