目录

  • 正确获取屏幕分辨率
    • 代码:
    • 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的区别

  1. 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
  2. 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.

单位关系

概念

  1. 像素(px):手机屏幕的最小构成单元;单位为px,1px=1像素点.
  2. 设备独立像素(dp或者dip):也交密度无关像素,在不同的像素密度的设备上会自动适配.
  3. 字体像素(sp):主要用于字体显示.
  4. 分辨率(px):一般描述为横向像素点个数x纵向像素点个数,例如上面的8001280(宽高),单位同像素一样.
  5. 屏幕尺寸:手机对角线的物理尺寸;单位:英寸(inch),一英寸约等于2.54cm.
  6. 屏幕像素密度(densityDpi或者dpi):也叫密度值和ppi,每英寸的像素点数.一般设备是有预设值的,对应的不同的分辨率.
  7. density密度:也叫做基准比例 ,表示dp到px的变换系数.

关系

  1. density=dpi/160,160像素/英寸是android定义的一个标准. 以上面数据: 1.125=180/160
  2. dp=px/density.
  3. 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.

更多相关文章

  1. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
  2. android 获取唯一标识
  3. android拍照与读取相册
  4. Android(安卓)热点开关状态的判断和获取热点ssid
  5. Android软键盘适配问题
  6. android 分辨率及密度详细
  7. AIR Native Extension的使用(Android)一 : 打包ane
  8. android之BitMap
  9. Android中GPS定位的简单应用

随机推荐

  1. Android(安卓)ArcGis 地图图层切换
  2. android >WebView 实现 JS , JAVA 互调
  3. Android(安卓)模拟登陆 保存密码(信息)到手
  4. Android(安卓)安装apk的方法
  5. Android监测前后台切换
  6. Android(安卓)的第一个游戏
  7. Android入门之相对布局(RelativeLayout)
  8. Android上的一些小技巧
  9. android -- notification使用(转)
  10. Android(安卓)自定义Button形状