【TextView】代码中设置文本大小时的单位问题

大家知道,在Android代码中获取res资源dimens.xml文件中定义的尺寸大小,可以通过如下三个方法:

  • getDimension
  • getDimensionPixelOffset
  • getDimensionPixelSize

他们的相同点和区别是:

  1. getDimension和getDimensionPixelOffset功能类似,唯一区别就是返回类型不一样,前者返回类型为int类型,后者为float类型;

  2. 如果resources中dimen属性值的单位是dp或者sp,三者都需要将其乘以density,然后返回对应px值;

  3. 如果单位是px,getDimension和getDimensionPixelOffset返回原值,而getDimensionPixelSize仍需乘以density;

比如,在dimens.xml资源文件中定义如下测试尺寸:

  
    16dp  
    16px  
    16sp  
   

测试代码:

float a1=getResources().getDimension(R.dimen.dp_01);    
int a2=getResources().getDimensionPixelOffset(R.dimen.dp_01);    
int a3=getResources().getDimensionPixelSize(R.dimen.dp_01);    
  
float b1=getResources().getDimension(R.dimen.px_01);  
int b2=getResources().getDimensionPixelOffset(R.dimen.px_01);    
int b3=getResources().getDimensionPixelSize(R.dimen.px_01);    
  
float c1=getResources().getDimension(R.dimen.sp_01);    
int c2=getResources().getDimensionPixelOffset(R.dimen.sp_01);    
int c3=getResources().getDimensionPixelSize(R.dimen.sp_01);    
  
Log.d("test", "getDimension= "+a1+", getDimensionPixelOffset="+a2+",getDimensionPixelSize="+a3);    
Log.d("test", "getDimension= "+b1+", getDimensionPixelOffset="+b2+",getDimensionPixelSize="+b3);    
Log.d("test", "getDimension= "+c1+", getDimensionPixelOffset="+c2+",getDimensionPixelSize="+c3); 

测试结果:

//Device (480*800,240dpi,density=1.5):   
getDimension= 24.0, getDimensionPixelOffset=24,getDimensionPixelSize=24    
getDimension= 16.0, getDimensionPixelOffset=16,getDimensionPixelSize=24    
getDimension= 24.0, getDimensionPixelOffset=24,getDimensionPixelSize=24    

了解了上述区别后,再来看看在代码中设置TextSize的问题。

setTextSize(float size)的默认大小单位是sp,所以通过该方法设置的文本大小和在布局中通过android:textSize属性设置的文本大小不一致,所以需要用到设置文本大小的另一个方法,指定单位:
setTextSize(int unit, float size)

其中,第一个参数的可选单位值为:

  • TypedValue.COMPLEX_UNIT_PX : Pixels
  • TypedValue.COMPLEX_UNIT_SP : Scaled Pixels
  • TypedValue.COMPLEX_UNIT_DIP : Device Independent Pixels

可以根据在资源中定义的不同尺寸选择合适的单位格式,这样,就能在代码中设置和布局中相同大小的文本。

关注微信公众号,第一时间获取技术资讯!

【TextView】代码中设置文本大小时的单位问题_第1张图片
微信公众号【技术鸟】_二维码.gif

你可能感兴趣的:(【TextView】代码中设置文本大小时的单位问题)