Android屏幕分辨率正确获取及PX,DPI,DP,SP等的对应关系
16lz
2021-12-04
目录
- 正确获取屏幕分辨率
- 代码:
- getMetrics和getRealMetrics的区别
- 扩展知识
- 单位关系
- 概念
- 关系
正确获取屏幕分辨率
代码:
DisplayMetrics dm =new DisplayMetrics();WindowManager manager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);manager.getDefaultDisplay().getRealMetrics(dm);int widthPixels = dm.widthPixels;//单位为像素 pxint height = dm.heightPixels;//单位为像素 pxfloat density = dm.density;float scaledDensity = dm.scaledDensity;int densityDpi = dm.densityDpi;
getMetrics和getRealMetrics的区别
- getMetrics()获取的Activity实际屏幕信息,而getRealMetrics()获取系统的屏幕信息.getMetrics()随着Activity的大小变化.而getRealMetrics()则是不变的.
例如:800*1280的设备,使用设备的分屏功能将Activtiy大小设置为一半.
getRealMetrics()获取的信息:w=800 h=1280 density=1.125 scaledDensity=1.125 densityDpi=180 x=213.0 y=213.0
getMetrics()获取信息:test: w=800 h=593 density=1.125 scaledDensity=1.125 densityDpi=180 x=213.0 y=213.0 - Activity全屏下,getRealMetrics()和getMetrics()获取到的屏幕信息差别只在于widthPixels或heightPixels的值是否去除虚拟键所占用的像素,和是否全屏和沉浸模式无关.
例如: 800*1280的设备,Activtiy全屏.
getRealMetrics()获取的信息:w=800 h=1280 density=1.125 scaledDensity=1.125 densityDpi=180 x=213.0 y=213.0
getMetrics()获取信息:test: w=800 h=1226 density=1.125 scaledDensity=1.125 densityDpi=180 x=213.0 y=213.0
相差的值就是设备底部的导航栏的高度(px),如果设备设置全屏或取消导航栏,getMetrics()输出的结果还是h=1226.
扩展知识
windowManager:是一个接口,用来管理窗口的。
获取方式有3种,效果都一样:
1.使用android.app.Activity#getWindowManager.WindowManager wm=getWindowManager()2.使用android.view.Window#getWindowManager.WindowManager wm=getwindow.getWindowManager();3.使用Activity的getSystemService(WINDOW_SERVICE)方法.WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);4. WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);在adapter中:DisplayMetrics dm =context. getResources().getDisplayMetrics();//和getMetrics()一样效果,去除了虚拟键所占像素int widthPixels = dm.widthPixels;//单位为像素 px//也可以用方法4.
单位关系
概念
- 像素(px):手机屏幕的最小构成单元;单位为px,1px=1像素点.
- 设备独立像素(dp或者dip):也交密度无关像素,在不同的像素密度的设备上会自动适配.
- 字体像素(sp):主要用于字体显示.
- 分辨率(px):一般描述为横向像素点个数x纵向像素点个数,例如上面的8001280(宽高),单位同像素一样.
- 屏幕尺寸:手机对角线的物理尺寸;单位:英寸(inch),一英寸约等于2.54cm.
- 屏幕像素密度(densityDpi或者dpi):也叫密度值和ppi,每英寸的像素点数.一般设备是有预设值的,对应的不同的分辨率.
- density密度:也叫做基准比例 ,表示dp到px的变换系数.
关系
- density=dpi/160,160像素/英寸是android定义的一个标准. 以上面数据: 1.125=180/160
- dp=px/density.
- sp=px/density.
在做UI设计时,设计师给出的切图如下:
为了自动适配不同的设备,需要换算成dp,sp使用,即字体用sp,其他用dp为单位;
所以XML中Button的width=75/1.125=67dp; height=240/1.125=213dp; textSize=30/1.125=27sp.
更多相关文章
- 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
- android 获取唯一标识
- android拍照与读取相册
- Android(安卓)热点开关状态的判断和获取热点ssid
- Android软键盘适配问题
- android 分辨率及密度详细
- AIR Native Extension的使用(Android)一 : 打包ane
- android之BitMap
- Android中GPS定位的简单应用