您的位置:首页 > 移动开发 > Android开发

Android尺寸dip,px,sp,dp

2018-02-06 14:13 316 查看

一.基础知识

 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息