前两天我在做一个项目时,Textview设置字体大小遇到字体放大,我设置的时16sp,实际显示却远远大于16sp,
初始代码targetView.setTextSize(getResources().getDimension(R.dimen.change_item_scale_textsize));
后来查看TextView源码,发现TextView 中setTextSize有两个方法,
setTextSize(float size)
setTextSize(int unit, float size)
默认setTextSize(float size)中默认执行setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
查看发现int unit参数有6种模式,
/** {@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;
后面三种正常用不到,分别对应磅/英尺/毫米
主要说前三种,也是我们正常用到的
COMPLEX_UNIT_PX ======> 对应px像素单位
COMPLEX_UNIT_DIP ======> 对应dp单位
COMPLEX_UNIT_SP =======> 对应sp单位,这setTextSize默认模式
这里getDimension获得以像素单位值,所以这里修改成:
targetView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.change_item_scale_textsize));