Android尺寸dip,px,sp,dp

一.基础知识

 Resolution(分辨率):指手机屏幕垂直和水平方向上的像素个数

 dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关。

 dp: 很简单,和dip是一样的。

 px: pixels(像素),不同的设备不同的显示屏显示效果是相同的,这是绝对像素,是多少就永远是多少不会改变。

 sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。等于是px的放大版本。所以sp再转换为px时需要缩放密度getResources().getDisplayMetrics().scaledDensity。即sp*scaledDensity = px

 dpi :dots per inch , 直接来说就是一英寸多少个像素点。常见取值 120,160,240。我一般称作像素密度,简称密度

其值的获取方法getResources().getDisplayMetrics().densityDpi;   

 density : 直接翻译的话貌似叫 密度。常见取值 1.5 , 1.0 。其实是 DPI / (160像素/英寸) 后得到的值即dpi/160 = density。其值的获取方法

getResources().getDisplayMetrics().density;  

二.方法返回值类型

1.获取dimen文件中尺寸

 下面这三个函数返回的都是绝对尺寸px,而不是相对尺寸(dp\sp等)。如果getDimension()返回结果是20.5f,那么getDimensionPixelSize()返回结果就是21,getDimensionPixelOffset()返回结果就是20

2.设置字体

 <resources>  
    <dimen name="dp_01">16dp</dimen>  
    <dimen name="px_01">16px</dimen>  
    <dimen name="sp_01">16sp</dimen>  
</resources>  
/**
* 获取dimension的方法有几种,区别不大
* 共同点是都会将dp,sp的单位转为px(绝对尺寸),px单位的保持不变
* 即比如getDimension(R.dimen.dp_01)如果传入的dimen是dp或者sp,则该方法会帮我们把数据转换为对应的px。
* getDimension() 返回float,
* getDimensionPixelSize 返回int 小数部分四舍五入
* getDimensionPixelOffset 返回int,但是会抹去小数部分
*/

2. 下面方法是设置字体大小为22多少,多少即第一个参数。setTextSize方法第一个参数不传默认是sp。getText()方法返回的是px
setTextSize(TypedValue.COMPLEX_UNIT_PX,22); //22像素  
setTextSize(TypedValue.COMPLEX_UNIT_SP,22); //22SP  
setTextSize(TypedValue.COMPLEX_UNIT_DIP,22);//22DIP  

所以结合 getDimension()使用时,getdimension返回类型是px类型,所以得到的是dimen.xml中设置的字体大小对应的px值,所以setTextSize第一个参数要填TypedValue.COMPLEX_UNIT_PX
3.方法设置的单位和返回值单位


 getheight()和getMeasuredHeight()获取得到的都是px单位

 getIntrinsicWidth()单位是dp

 drawable.setBounds()方法里面属性是px

 setPadding()//参数单位px

 getPadding()//返回值单位px

 paint.measureText(string)返回值是px

 getIntrinsicWidth()返回的是dp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值