TextView字体大小设置同方式的区别
来源:互联网 发布:海淘网转运 知乎 编辑:程序博客网 时间:2024/04/29 16:29
文本字体大小的设置方式有如下几种:
- android:textSize=”18sp”;
- tv.setTextSize(18);
- setTextSize(int unit, 18);
其中,第一个参数的可选单位值为:
TypedValue.COMPLEX_UNIT_PX : Pixels
TypedValue.COMPLEX_UNIT_SP : Scaled Pixels
TypedValue.COMPLEX_UNIT_DIP : Device Independent Pixels
前两种方法我们都比较熟悉,分别用于XML、代码中设置字体大小。
但是如果使用相同的数值(如:18)则会得到不同的字体大小的效果,产生的原因是因为setText()的默认单位是sp,此方法后期还会调用setTextSize(int unit, float size)去将sp转换成px再去设置字体的大小,会导致单位不一致,出来的结果也不一样了。解决办法是使用第三种方式去指定单位设置文本大小,就可以实现效果一致。
在自定义控件的时候我们也会常使用一种单位转化方法来达到适配的目的
float size=TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 18,getResources().getDisplayMetrics());
单位可选类型:
TypedValue.COMPLEX_UNIT_PX : Pixels
TypedValue.COMPLEX_UNIT_SP : Scaled Pixels
TypedValue.COMPLEX_UNIT_DIP : Device Independent Pixels
这种方式是将18sp转换成以px为单位的值,可以解决自定义控件屏幕适配的麻烦。最终也是以px为单位,若是设置文本大小,可以使用这种方式转化单位,也可以通过第三种方式直接指定单位设置大小。
从res资源dimens.xml文件中获取尺寸大小的方法:
- getDimension
- getDimensionPixelOffset
- getDimensionPixelSize
他们的相同点和区别是:
- getDimension和getDimensionPixelOffset功能类似,唯一区别就是返回类型不一样,前者返回类型为int类型,后者为float类型;
- 如果resources中dimen属性值的单位是dp或者sp,三者都需要将其乘以density,然后返回对应px值;
- 如果单位是px,getDimension和getDimensionPixelOffset返回原值,而getDimensionPixelSize仍需乘以density;
示例,在dimens.xml资源文件中定义如下测试尺寸:
<resources> <dimen name="dp_01">16dp</dimen> <dimen name="px_01">16px</dimen> <dimen name="sp_01">16sp</dimen> </resources>
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
参考资料:http://www.jianshu.com/p/9cdfc2f26a52
- TextView字体大小设置同方式的区别
- TextView设置不同的字体大小,颜色,类别
- textView设置字体大小
- 设置android textview字体大小
- 设置textview颜色字体大小
- android textview字体大小设置
- 设置TextView字体大小
- android 动态设置TextView字体大小
- android原生TextView设置字体大小
- 按照屏幕的尺寸,设置TextView的字体大小
- android中为textview的内容分别设置字体大小
- android 一个 textview 设置不同的字体大小和颜色
- android 一个 textview 设置不同的字体大小和颜色
- 为TextView设置不同的字体大小和颜色
- android 一个 textview 设置不同的字体大小和颜色
- android 一个 textview 设置不同的字体大小和颜色
- 动态代码设置Textview的字体大小,引用Dimen资源
- android 一个 textview 设置不同的字体大小和颜色
- 用聚合数据API快速写出小程序
- 骨骼动画的插值与融合
- 素数的基本性(转)
- 关于字符串的面试题
- C/C++ OpenCV之Canny边缘检测
- TextView字体大小设置同方式的区别
- 欢迎使用CSDN-markdown编辑器
- Leetcode023--计数和说出来
- TextView不依附ScrollView滚动
- error/utility.c/SystemCommand/2094.
- android中多个LinearLayout平分布局
- 3维迷宫的bfs
- vmstat详解
- android_58_service_remote_AIDL调用远程服务