当前位置:首页 > 实用技巧 >

android字体自适应(android全局字体)

来源:原点资讯(www.yd166.com)时间:2023-11-27 10:54:51作者:YD166手机阅读>>

android字体自适应,android全局字体(1)

TextView字体大小与组件高度不匹配问题

通常在做UI的时候,文本都是比较重要的一部分。

但是在Android中,往往会出现实际效果与UI图不太一致的情况,导致这种情况的出现主要是以下3个点。

问题点

属性值与实际绘制测量结果不一致

  • 字体大小
  • 字体行高
  • 组件高度
效果图

可以看出,无论是单行还是多行,效果都不太理想,字体越大,偏差就越大。

android字体自适应,android全局字体(2)

解决方案
  • 自定义行高属性,严格遵从定义数值
  • 通过文本行数x行高,重新计算组件高度
  • 根据给定字号,在行高范围内,自适应调整字体高度不会超过行高,再重新设置字号大小
方案效果图

可以看出,无论是单行还是多行,效果都很不错的。

android字体自适应,android全局字体(3)

具体代码实现

package cc.xiaobaicz.playground.widgets import android.content.Context import android.graphics.Paint.FontMetrics import android.os.Build import android.text.StaticLayout import android.util.AttributeSet import android.util.TypedValue import androidx.appcompat.widget.AppCompatTextView import cc.xiaobaicz.playground.R import kotlin.math.max /** * TextView * 1\. 行高适配 * @author xiaobai */ class Text : AppCompatTextView { constructor(context: Context) : this(context, null) constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, android.R.attr.textViewStyle) constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { isFallbackLineSpacing = false val typedArray = context.theme.obtainStyledAttributes(attrs, R.styleable.Text, defStyleAttr, 0) lineHeight = typedArray.getDimension(R.styleable.Text_lineHeightX, textSize).toInt() typedArray.recycle() } override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { super.onMeasure(widthMeasureSpec, heightMeasureSpec) if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST) { // 重新计算高度,适应多行文本 val layout = StaticLayout.Builder.obtain(text, 0, text.length, paint, measuredWidth).build() val height = lineHeightX * layout.lineCount paddingTop paddingBottom setMeasuredDimension(measuredWidth, height) } } override fun setFallbackLineSpacing(enabled: Boolean) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) return super.setFallbackLineSpacing(false) } var lineHeightX: Int = 0 private set override fun setLineHeight(lineHeight: Int) { lineHeightX = max(lineHeight, 8) adaptiveTextSize() super.setLineHeight(lineHeightX) requestLayout() invalidate() } private fun adaptiveTextSize() { var metrics = paint.fontMetrics while (metrics.fontHeight > lineHeightX) { paint.textSize -= max((metrics.fontHeight - lineHeightX) / 2, 1f) metrics = paint.fontMetrics } setTextSize(TypedValue.COMPLEX_UNIT_PX, paint.textSize) } private val FontMetrics.fontHeight: Float get() = descent - ascent },

栏目热文

android全局替换字体(android字体修改教程)

android全局替换字体(android字体修改教程)

了解更多字体、手机测评等内容,请关注“宁静之雨”gongzhonghao。一篇就够了,只要你读透了,再加上我分享的字体,...

2023-11-27 10:38:02查看全文 >>

泥炭土和营养土哪个好(有机营养土与泥炭土哪个好)

泥炭土和营养土哪个好(有机营养土与泥炭土哪个好)

营养土,不仅疏松透气,而且还减轻植物管理带来的烦恼,非常适合盆栽植物使用,也受到很多花友的喜爱,会经常购买营养土。但是如...

2023-11-27 10:56:37查看全文 >>

泥炭土是什么(泥炭土和松针土哪个养花好)

泥炭土是什么(泥炭土和松针土哪个养花好)

有些花友比较排斥泥炭土,觉得用它养花不环保,转而使用椰糠,它们都不算是泥土,而是种花种菜的基质,都有非常棒的保水能力,本...

2023-11-27 10:39:34查看全文 >>

泥炭土和营养土的区别(泥炭土和营养土哪种营养高)

泥炭土和营养土的区别(泥炭土和营养土哪种营养高)

泥炭土也有假的,掺了大量的椰糠,看似疏松透气,养多肉就烂根花土也会有假的,当下园艺生活越来越丰富,喜欢养花的人越来越多,...

2023-11-27 10:40:51查看全文 >>

泥炭土是不是土里最不好的一种土(泥炭土的优缺点和坏处)

泥炭土是不是土里最不好的一种土(泥炭土的优缺点和坏处)

想把花养好,就一定选择好的土壤。如果我们能给家里的花草用合适的土壤,花草种下去就能噌噌生长,后续养护也能省下不少力气。泥...

2023-11-27 10:58:27查看全文 >>

android软件的字体设置(dw软件字体设置)

android软件的字体设置(dw软件字体设置)

要将所有布局中的TextView的字体统一修改,可以通过以下步骤实现:创建一个字体资源文件。在res目录下创建一个fon...

2023-11-27 10:40:56查看全文 >>

桃蛋怎么养才能变红(桃蛋怎样养才长得快)

桃蛋怎么养才能变红(桃蛋怎样养才长得快)

桃蛋,叶片肥厚粉嫩,上色出状态时饱满多汁,像熟透的桃子一样,看起来很好吃的样子,备受大众喜爱。那桃蛋怎么养得肥肥胖胖红红...

2023-11-27 10:43:50查看全文 >>

桃蛋怎样养才可以让它发红(桃蛋要怎么养才上色)

桃蛋怎样养才可以让它发红(桃蛋要怎么养才上色)

粉嘟嘟的多肉桃蛋俘获了很多少女的喜欢,如今养肉肉已经是一个全面羊肉的时代了,下到上幼儿园的小朋友,上到六七十岁的大姨大妈...

2023-11-27 10:26:24查看全文 >>

桃蛋控养方法(桃蛋怎么养出状态)

桃蛋控养方法(桃蛋怎么养出状态)

把桃蛋养得萌萌哒,有3个技巧,圆滚滚地又肥又美桃蛋虽然是一种很普通的多肉,很便宜的多肉,也可以自己找叶子来叶插繁殖,但是...

2023-11-27 10:21:00查看全文 >>

养桃蛋时应注意些什么(养桃蛋禁忌什么)

养桃蛋时应注意些什么(养桃蛋禁忌什么)

喜欢多肉植物的花友一定不要错过这一款粉粉嫩嫩的植物,它学名桃之卵,别号桃蛋,它圆润丰满的叶片是粉红色的,就像成熟的桃子一...

2023-11-27 10:52:52查看全文 >>

文档排行