原文:Android 获取屏幕分辨率

得到一个屏幕尺寸的三种方法如下:
        // 通过WindowManager获取
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);

        // 通过Resources获取 
        DisplayMetrics dm2 = getResources().getDisplayMetrics();

        // 获取屏幕的默认分辨率
        Display display = getWindowManager().getDefaultDisplay();
        System.out.println("width-display :" + display.getWidth());
        System.out.println("heigth-display :" + display.getHeight());

安卓4.2系统中,使用方法一得到了正确的屏幕尺寸值,而使用方法二和三得到的值全部为零。原因不祥。其中方法三中的display.getWidth()和display.getHeight()已被弃用。

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);//display = getWindowManager().getDefaultDisplay();display.getMetrics(dm)(把屏幕尺寸信息赋值给DisplayMetrics dm);
width = dm.widthPixels;
height = dm.heightPixels;
xdpi = dm.xdpi;
ydpi = dm.ydpi;
density = dm.densityDpi;
fdensity = dm.density;

查询log,得到各值如下:
D/Lichking(22643): -----------widthpixels---540
D/Lichking(22643): -----------heightpixels---960
D/Lichking(22643): -----------xdpi---244.92857
D/Lichking(22643): -----------ydpi---246.30302
D/Lichking(22643): -----------density---240
D/Lichking(22643): -----------fdensity---1.5
另提一点,我们通常所指的屏幕上的int尺寸是像素单位,比如我用getHitRect()得到控件的矩形坐标的值即使和像素尺寸相匹配的。

DisplayMetrics和Display的关系。
Display指代显示区域这个对象,它可能是真实的物理屏幕,也可能仅指应用程序的显示区域,比如在非全屏Activity里,系统因为有状态栏,因此显示区域要比物理屏幕要小。DisplayMetrics里封装了显示区域的各种属性值。查看源码发现,在DisplayMetrics对各个属性值的注释都说明为真实的物理尺寸。而且也发现display.getMetrics(dm)这一函数基本在应用在获取真实屏幕尺寸的时候。记住这一点即好。

另外xdpi不是指屏幕宽度上以dp为单位的大小。以dp为单位的屏幕宽度需用计算公式:dpWidth = WidthPixels / fdensity = 540 / 1.5 = 360

Android 获取屏幕分辨率的更多相关文章

  1. Android获取屏幕分辨率及DisplayMetrics简介

    Android 可设置为随着窗口大小调整缩放比例,但即便如此,手机程序设计人员还是必须知道手机屏幕的边界,以避免缩放造成的布局变形问题. 手机的分辨率信息是手机的一项重要信息,很好的是,Android ...

  2. android获取屏幕分辨率

    DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); dm. ...

  3. 获取Android设备屏幕分辨率

    1.Android 4.3引入的wm工具: a.获取Android设备屏幕分辨率: adb shell wm size b.获取android设备屏幕密度: adb shell wm density ...

  4. Android adb获取屏幕分辨率

    获取Android设备屏幕分辨率,可以采用最快捷的方式,使用ADB命令获取即可: 打印详细方式: adb shell dumpsys window displays 执行结果: Dump time : ...

  5. Android 获取屏幕大小和密度

    Android 获取屏幕大小和密度 DisplayMetrics metric = new DisplayMetrics(); getWindowManager().getDefaultDisplay ...

  6. Android获取屏幕大小

    本来想着如下方法就能得到了 Display display = getWindowManager().getDefaultDisplay(); Log.i("view", &quo ...

  7. Android获取屏幕宽和高

    android获取屏幕的高度和宽度用到WindowManager这个类,两种方法:   1.WindowManager wm = (WindowManager) getContext()        ...

  8. Qt获取屏幕分辨率

    http://my.oschina.net/u/1255773/blog/159557 原 Qt获取屏幕分辨率 发表于1年前(2013-09-06 11:00)   阅读(546) | 评论(0) 3 ...

  9. 获取屏幕分辨率(C/C++)

    C/C++获取屏幕分辨率的方法 int main(int argc, char* argv[]) { // 需要添加头文件: // #include <Windows.h> system( ...

随机推荐

  1. BZOJ 3307: 雨天的尾巴( LCA + 线段树合并 )

    路径(x, y) +z : u处+z, v处+z, lca(u,v)处-z, fa(lca)处-z, 然后dfs一遍, 用线段树合并. O(M log M + M log N). 复杂度看起来不高, ...

  2. Eclipse用link方式安装插件

    其实eclipse安装插件更方便的方法就是直接扔到eclipse目录下的dropins文件夹,但如果插件比较多或者大的话,会让eclipse变得臃肿.下面介绍的用link方式可以避免这样的问题. 用l ...

  3. Window2003、xp远程备份数据库文件(xcopy+rar+pscp)

    Window2003.xp远程备份数据库文件 xcopy+rar+pscp .bat脚本 Eg: xcopy d:\dbtest\*.* d:\dbtemp\ /y D:\backup\Rar.exe ...

  4. ZRender源码分析6:Shape对象详解之路径

    开始 说到这里,就不得不提SVG的路径操作了,因为ZRender完全的模拟了SVG原生的path元素的用法,很是强大. 关于SVG的Path,请看这里: Path (英文版) 或者 [MDN]SVG教 ...

  5. EOFError:EOF when reading a line

    Sublime2编译Python程序EOFError:EOF when reading a line: 是因为Sublime2对于python中运行含有input或者raw_input的python代 ...

  6. PDO的事物处理机制

    Mysql的事务处理: 1.MySQL目前只有InnoDB 和BDB两个数据表类型才支持事务. 2.在默认条件下,MySQL是以自动提交(autocommit)模式运行的,这就意味着所执行的每一个语句 ...

  7. Flink Program Guide (10) -- Savepoints (DataStream API编程指导 -- For Java)

    Savepoint 本文翻译自文档Streaming Guide / Savepoints ------------------------------------------------------ ...

  8. 我的android studio

  9. docker 基于现有镜像修改后保存,上传私有仓库

    docker:/root# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f3cb864be528 192.168.3 ...

  10. cdoj 秋实大哥与战争

    首先,显然每个区间的最长连续子区间要么在左孩子里,要么在右孩子里,要么跨越两个孩子.于是我们可以对每个区间维护如下信息ll(left long),rl(rigth long),ml(mid long) ...