• Android上常见度量单位【xdpi、hdpi、mdpi、ldpi】解读


    sity

    根据像素分辨率,在屏幕指定物理宽高范围内能显示的像素数量。

    在同样的宽高区域,低密度的显示屏能显示的像素较少,而高密度的显示屏则能显示更多的像素。

    屏幕密度非常重要,因为其它条件不变的情况下,一共宽高固定的UI组件(比如一个按钮)在在低密度的显示屏上显得很大, 而在高密度显示屏上看起来就很小。

    为简单起见,Android把所有的屏幕分辨率也分为四种尺寸:小,普通,大,超大(分别对应:small, normal, large, and extra large).

    应用程序可以为这四种尺寸分别提供不同的资源-平台将透明的对资源进行缩放以适配指定的屏幕分辨率。

    5.设备独立像素Density-independent pixel (dp)

    应用程序可以用来定义UI组件的虚拟像素单元,通过密度无关的方式来描述布局尺寸和位置。

    一个设备独立像素相当于一个160 dpi屏幕上的物理像素。

    在程序运行时,系统根据屏幕的实际密度透明的处理任何需要缩放的设备独立像素单元,设备独立像素转换成屏幕实际像素的换算很简单:pixels = dps * (density / 160).

    例如在240 dpi的屏幕上,1个设备独立像素等于1.5物理像素.为确保UI组件在不同的屏幕都能合适的展示,强烈建议使用设备独立像素单元来定义你的应用程序UI。

    四种屏幕尺寸分类:: small, normal, large, and xlarge

    四种密度分类: ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high)

    需要注意的是: xhdpi是从  Android   2.2 (API Level 8)才开始增加的分类.

    xlarge是从Android 2.3 (API Level 9)才开始增加的分类.

    DPI是“dot per inch”的缩写,每英寸像素数。

    一般情况下的普通屏幕:ldpi是120,mdpi是160,hdpi是240,xhdpi是320。

    参考:http://developer.android.com/images/screens_support/screens-ranges.png

    两种获取屏幕分辨率信息的方法:

    DisplayMetrics metrics = new DisplayMetrics();

    Display display = activity.getWindowManager().getDefaultDisplay();

    display.getMetrics(metrics);

    //这里得到的像素值是设备独立像素dp

    //DisplayMetrics metrics=activity.getResources().getDisplayMetrics(); 这样获得的参数信息不正确,不要使用这种方式。

    不能使用android.content.res.Resources.getSystem().getDisplayMetrics()。这个得到的宽和高是空的。

    复制代码
        private void initResolutionStr(Context context) {
    if (ApiConfig.getResolutionStr() == null || ApiConfig.getResolutionStr().equals("")) {
    WindowManager winMgr = (WindowManager) context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
    Display display = winMgr.getDefaultDisplay();
    int height = display.getHeight();
    int width = display.getWidth();
    String resolution = height > width ? height + "x" + width : width + "x" + height;
    ApiConfig.setResolutionStr(resolution);
    // densityDpi = 120dpi is ldpi, densityDpi = 160dpi is mdpi,
    // densityDpi = 240dpi is hdpi, densityDpi = 320dpi is xhdpi
    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
  • 相关阅读:
    心得体悟帖---200209(效率太低的事情我是不会做的,这个可以解释我所有的行为)
    心得体悟帖---200209(顺心而动的睡觉方式(6+1或者5+2的睡觉方式))
    按钮用图片做背景hover时闪烁
    范仁义Emmet课程---1、HTML速写之Emmet语法规则
    CSS3疑难问题---5、:before和::before的区别
    reset.css是什么
    日常英语---200209(Abbreviations(Emmet Abbreviations Syntax))
    日常英语---200209(relative(layer model))
    日常英语---200209(Emmet Abbreviations Syntax)
    伪元素和伪类在chrome浏览器里面还是比较好区分的
  • 原文地址:https://www.cnblogs.com/yssgyw/p/3512665.html
Copyright © 2020-2023  润新知