TextView的setTextSize与xml中android:textSize属性值的对应关系

android中,对TextView设置文本字体大小,是通过在layout xml中设置android:textSize的属性值实现的,比如设置"24sp",这里的sp是一种单位,其他可选的单位还有px,dip(dp),pt,in,mm,建议使用sp。如果要在代码中设置文本字体大小,会用到setTextSize,传入一个float的值,那么这个float值的单位是什么呢?我原本以为是px,结果不是,查看代码发现:

复制代码
public void setTextSize(float size) {
    setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
}

原来默认是sp,如果要设置以其他单位的size,就要用到带两个参数的setTextSize,

复制代码
public void setTextSize(int unit, float size) {
    if (!isAutoSizeEnabled()) {
        setTextSizeInternal(unit, size, true /* shouldRequestLayout */);
    }
}

第一参数可选的值在TypedValue.java中定义:

复制代码
/** {@link #TYPE_DIMENSION} complex unit: Value is raw pixels. */
public static final int COMPLEX_UNIT_PX = 0;
/** {@link #TYPE_DIMENSION} complex unit: Value is Device Independent
 *  Pixels. */
public static final int COMPLEX_UNIT_DIP = 1;
/** {@link #TYPE_DIMENSION} complex unit: Value is a scaled pixel. */
public static final int COMPLEX_UNIT_SP = 2;
/** {@link #TYPE_DIMENSION} complex unit: Value is in points. */
public static final int COMPLEX_UNIT_PT = 3;
/** {@link #TYPE_DIMENSION} complex unit: Value is in inches. */
public static final int COMPLEX_UNIT_IN = 4;
/** {@link #TYPE_DIMENSION} complex unit: Value is in millimeters. */
public static final int COMPLEX_UNIT_MM = 5;

顺便提一下dp单位和px单位之间的转换,但这里用不到。

复制代码
int dp2px(Context context, float dpValue) {
    final float scale = context.getResources().getDisplayMetrics().density;
    return (int) (dpValue * scale + 0.5f);
}
相关推荐
Hcoco_me8 小时前
HDCP(四)
音频·接口·媒体·dp·gpmi·hdcp
好好学习^按时吃饭1 天前
[蓝桥杯 2022 省 B] 李白打酒加强版
蓝桥杯·dp
_extraordinary_5 天前
简单多状态dp问题 + 总结(一)
算法·dp
Jcqsunny12 天前
[分层图] 汽车加油行驶问题
算法·dp·分层图·分层图dp
悄悄敲敲敲19 天前
C++:背包问题习题
开发语言·c++·算法·dp
代码小将1 个月前
两道算法练习
算法·dp
鸡鸭扣1 个月前
数据结构与算法:动态规划dp:买卖股票相关力扣题(下):309. 买卖股票的最佳时机含冷冻期、714. 买卖股票的最佳时机含手续费
数据结构·python·算法·leetcode·动态规划·力扣·dp
Tisfy2 个月前
LeetCode 0063.不同路径 II:动态规划 - 原地使用地图数组,几乎无额外空间开销
算法·leetcode·动态规划·题解·dp
赵鑫亿2 个月前
7.DP算法
算法·dp
像污秽一样2 个月前
AI刷题-蛋糕工厂产能规划、优质章节的连续选择
数据结构·c++·算法·dp·队列