Android获取屏幕的物理尺寸

屏幕英寸值

计算方法:获取到屏幕的分辨率point.xpoint.y,再取出屏幕的DPI(每英寸的像素数量),计算长和宽有多少英寸,即:point.x / dm.xdpipoint.y / dm.ydpi,屏幕的长和宽算出来了,再用勾股定理,计算出斜角边的长度,即屏幕尺寸。

/**
 * 得到屏幕的物理尺寸,由于该尺寸是在出厂时,厂商写死的,所以仅供参考
 * 计算方法:获取到屏幕的分辨率:point.x和point.y,再取出屏幕的DPI(每英寸的像素数量),
 * 计算长和宽有多少英寸,即:point.x / dm.xdpi,point.y / dm.ydpi,屏幕的长和宽算出来了,
 * 再用勾股定理,计算出斜角边的长度,即屏幕尺寸。
 * @param context
 * @return
 */
public static double getPhysicsScreenSize(Context context){
    WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Point point = new Point();
    manager.getDefaultDisplay().getRealSize(point);
    DisplayMetrics dm = context.getResources().getDisplayMetrics();
    int densityDpi = dm.densityDpi; //得到屏幕的密度值,但是该密度值只能作为参考,因为他是固定的几个密度值
    double x = Math.pow(point.x / dm.xdpi, 2); //dm.xdpi是屏幕x方向的真实密度值,比上面的densityDpi真实
    double y = Math.pow(point.y / dm.ydpi, 2); //dm.xdpi是屏幕y方向的真实密度值,比上面的densityDpi真实
    double screenInches = Math.sqrt(x + y);
    return screenInches;
}

private double getScreenInches(Context context) {
    WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Point point = new Point();
    manager.getDefaultDisplay().getRealSize(point);
    DisplayMetrics dm = context.getResources().getDisplayMetrics();
    int densityDpi = dm.densityDpi; //得到屏幕的密度值,但是该密度值只能作为参考,因为他是固定的几个密度值
    double x = Math.pow(point.x / dm.xdpi, 2); //dm.xdpi是屏幕x方向的真实密度值,比上面的densityDpi真实
    double y = Math.pow(point.y / dm.ydpi, 2); //dm.xdpi是屏幕y方向的真实密度值,比上面的densityDpi真实
    double screenInches = Math.sqrt(x + y);
    return screenInches;
}

private double getScreenXInches(Context context) {
    WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Point point = new Point();
    manager.getDefaultDisplay().getRealSize(point);
    DisplayMetrics dm = context.getResources().getDisplayMetrics();
    int densityDpi = dm.densityDpi; //得到屏幕的密度值,但是该密度值只能作为参考,因为他是固定的几个密度值。
    double x = point.x / dm.xdpi; //dm.xdpi是屏幕x方向的真实密度值,比上面的densityDpi真实。
    return  x;
}

private double getScreenYInches(Context context) {
    WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Point point = new Point();
    manager.getDefaultDisplay().getRealSize(point);
    DisplayMetrics dm = context.getResources().getDisplayMetrics();
    int densityDpi = dm.densityDpi; //得到屏幕的密度值,但是该密度值只能作为参考,因为他是固定的几个密度值。
    double y = point.y / dm.ydpi; //dm.ydpi是屏幕y方向的真实密度值,比上面的densityDpi真实。
    return  y;
}

注意:此处displayMetrics不要使用context.getApplicationContext().getResources().getDisplayMetrics()来获取。
上面说到,DPI是由设备出厂时写死到设备里的,如果写入的DPI值不准确,当然计算不出准确的屏幕尺寸。这也是友盟统计里没有屏幕尺寸这一项的原因吧,所以计算出的屏幕尺寸只做参考。

屏幕厘米值

mScreenInches = getScreenInches(this);
mScreenXInches = getScreenXInches(this);
Log.i(TAG, "mScreenInches: " + mScreenInches + ", mScreenXInches: " + mScreenXInches);
//屏幕厘米值: 1英寸(in)=2.54厘米(cm)
mScreenXCm = mScreenXInches * 2.5399999961392;
Log.i(TAG, "mScreenXCm: " + mScreenXCm);
//每厘米包含多少像素
mScreenPixelPerCm = (int) (ScreenUtil.getScreenWidth(this) / mScreenXCm);
Log.i(TAG, "mScreenPixelPerCm: " + mScreenPixelPerCm);
上一篇 Android获取系统语言(兼容7.0)
下一篇 Android接入高德地图总结
目录
文章列表
1 Android DrawerLayout简单使用
Android DrawerLayout简单使用
2
将文本转为二维码图片Base64编码
将文本转为二维码图片Base64编码
3
实现一个Spring Boot Starter入门
实现一个Spring Boot Starter入门
4
Android架构之MVC、MVP、MVVM
Android架构之MVC、MVP、MVVM
5
以太坊学习5:Geth命令行环境
以太坊学习5:Geth命令行环境
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。