通过DisplayMetrics获取屏幕分辨率等参数以及源码解析

  • 用法--通过WindowManager将设置信息存放到DisplayMetrics中
  • WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    DisplayMetrics outMetrics = new DisplayMetrics();
    windowManager.getDefaultDisplay().getMetrics(outMetrics);
    mScreenHeight = outMetrics.heightPixels;
    Logger.d(TAG, "--toStrng-" + outMetrics.toString());
    Logger.d(TAG, "--屏幕高度-" + outMetrics.heightPixels);
    Logger.d(TAG, "--屏幕宽度-" + outMetrics.widthPixels);
    Logger.d(TAG, "--scaledDensity-" + outMetrics.scaledDensity);
    Logger.d(TAG, "--设置密度-" + outMetrics.density);
    Logger.d(TAG, "--densityDpi-" + outMetrics.densityDpi);
    Logger.d(TAG, "--xdpi-" + outMetrics.xdpi);
    Logger.d(TAG, "--ydpi-" + outMetrics.ydpi);

  • 打印结果
  • 其中
    outMetrics.widthPixels
    outMetrics.heightPixels 为设备宽和高的像素
    outMetrics.density为密度为3.0
    outMetrics.densityDpi为密度api480
  • 源码分析Display类
  • public void getMetrics(DisplayMetrics outMetrics) {
        synchronized (this) {
            updateDisplayInfoLocked();
  • 	//在这个方法中获取屏幕信息
            mDisplayInfo.getAppMetrics(outMetrics, mDisplayAdjustments);
        }
    }
  • 查看getAppMetrics方法-->最后在Display类中获取
    private void getMetricsWithSize(DisplayMetrics outMetrics, CompatibilityInfo compatInfo,
            Configuration configuration, int width, int height) {
        outMetrics.densityDpi = outMetrics.noncompatDensityDpi = logicalDensityDpi;
        outMetrics.density = outMetrics.noncompatDensity =
                logicalDensityDpi * DisplayMetrics.DENSITY_DEFAULT_SCALE;
        outMetrics.scaledDensity = outMetrics.noncompatScaledDensity = outMetrics.density;
        outMetrics.xdpi = outMetrics.noncompatXdpi = physicalXDpi;
        outMetrics.ydpi = outMetrics.noncompatYdpi = physicalYDpi;
    
        width = (configuration != null
                && configuration.screenWidthDp != Configuration.SCREEN_WIDTH_DP_UNDEFINED)
                ? (int)((configuration.screenWidthDp * outMetrics.density) + 0.5f) : width;
        height = (configuration != null
                && configuration.screenHeightDp != Configuration.SCREEN_HEIGHT_DP_UNDEFINED)
                ? (int)((configuration.screenHeightDp * outMetrics.density) + 0.5f) : height;
    
        outMetrics.noncompatWidthPixels  = outMetrics.widthPixels = width;
        outMetrics.noncompatHeightPixels = outMetrics.heightPixels = height;
    
        if (!compatInfo.equals(CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO)) {
            compatInfo.applyToDisplayMetrics(outMetrics);
        }
    }
  • 最后发现所求的参数信息都是在DisplayMetrics类中处理


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值