zoukankan      html  css  js  c++  java
  • 安卓的设备的分辨率

    DisplayMetrics metrice= new DisplayMetrics();

    Display defaultDisplay = getWindowManager().getDefaultDisplay();
    defaultDisplay.getMetrics(metrice);

    int densityDpi = metrice.densityDpi;
    float density = metrice.density;
    int heightPixels = metrice.heightPixels;
    int widthPixels = metrice.widthPixels;
    float xdpi = metrice.xdpi;
    float ydpi = metrice.ydpi;
    float scaledDensity = metrice.scaledDensity;

    dip:于设备无关的像素值,比如说我在中密度上显示的值为50dip,在低密度的设备上显示的值就为50*0.75=37.5px

    px:代表物理像素,比如说在中密度上显示的值为50px,注意单位是px,在其他密度设备上显示的值也是50px

    densityDpi :每英寸多少个点

    density:densityDpi /160;

    drawable-hdpi  高密度,通常是指240也就是上述代码中的densityDpi为240

    drawable-ldpi 底密度,通常是指120
    drawable-mdpi 中等密度,通常是指160

    drawable-xhdpi 超高密度,通常是指320

    在drawable-mdpi 里放了一张像素为48*48的图片,把该图片设置成button按钮的背景,在不同密度,不同分辨率的设备下获得的数据如下:

     densityDpi=120
     density=0.75
     heightPixels=320
     widthPixels=240
     xdpi=120.0
     ydpi=120.0
     scaledDensity=0.75
     intrinsicHeight=36
     intrinsicWidth=36

     densityDpi=160
     density=1.0
     heightPixels=480
     widthPixels=320
     xdpi=160.0
     ydpi=160.0
     scaledDensity=1.0
     intrinsicHeight=48
     intrinsicWidth=48

     densityDpi=160
     density=1.0
     heightPixels=768
     widthPixels=1024
     xdpi=160.0
     ydpi=160.0
     scaledDensity=1.0
     intrinsicHeight=48
     intrinsicWidth=48

     densityDpi=240
     density=1.5
     heightPixels=800
     widthPixels=480
     xdpi=240.0
     ydpi=240.0
     scaledDensity=1.5
     intrinsicHeight=72
     intrinsicWidth=72

     densityDpi=240
     density=1.5
     heightPixels=800
     widthPixels=480
     xdpi=160.42105
     ydpi=160.0
    scaledDensity=1.5
     dimension=75.0
     intrinsicHeight=72
    intrinsicWidth=72

     densityDpi=320
     density=2.0
     heightPixels=640
     widthPixels=960
     xdpi=320.0
     ydpi=320.0
     scaledDensity=2.0
     intrinsicHeight=96 //代表图片实际显示的物理像素
     intrinsicWidth=96
    由此可知,图片的显示和密度之间存在着莫大的关系,在同等密度下不管设别分辨率多大,图片所显示的大小是一样的,在密度不相同的情况下,图片会进行缩放:例如,在中等密度下图片显示高度为48px,低密度下显示的高度为48*0.75=36,图片会进行缩小;在高密度下显示的高度为48*1.5=72,图片会放大;

    附:安卓dp和px之间的换算关系

        private float px2dip(Context ctx, int pxValue) {
    
            return ((float) pxValue * 160)
                    / ctx.getResources().getDisplayMetrics().densityDpi;
    
            // 或者
            // return pxValue / ctx.getResources().getDisplayMetrics().density;
        }
    private int dip2px(Context ctx, float dpValue) {
    
    return (int) (dpValue * ctx.getResources().getDisplayMetrics().density + 0.5f);
    }

     2016.4.17更新:

    关于android开发里面的layout文件夹的sw后缀等相关:(drawable-en-rUS-port-160dpi-finger-qwerty-dpad-480 x320/)

    android layout文件支持区分不同地区,语言,分辨率,键盘模式等情况下的布局,只需要将不同的布局放置在对应的目录下面即可(不过名字是有先后顺序的,系统会根据配置到相应的目录下自动加载对应的布局)

    关于dp,px,dpi的补充:

    dpi其实是人为在Android/device/softwinner/astar-common/astar-y3.mk中设定的,没有Android源码的可以通过 adb shell getprop ro.sf.lcd_density 获得。
    同一图片在不同分辨率的手机上显示出来的大小是不一样的,那么图片显示出来的大小高低是跟什么有关呢,答案是dpi
    图片的像素数已经固定了,那么在dpi比较高的手机上面,实际显示的高度一定就小了,所以在高dpi屏幕需要更大的图片才能得到同样的显示效果,反之亦然。
    ppi和图片px的关系如下

    px1/px2=dpi1/dpi2

    选定一个ppi值作为基础绘制图片,用ppi的比值计算出图片缩放比例就可以适配各种屏幕

    px2=px1*(dpi2/dpi1)

    安卓选定的这个基础值就是160dpi

    px2=px1*(dpi2/160)

    安卓创造了一个新的单位dp,中文名设备独立像素。并且规定在160ppi的屏幕上,1dp=1px。

     

  • 相关阅读:
    ASP.NET 2.0的页面缓存功能介绍
    第五课 主定理
    HDU 1051 Wooden Sticks
    一行代码让浏览器变编辑器
    算法概论习题1001Forest
    第七课 寻找强连通分量
    8223. Tiling a Grid With Dominoes
    迷宫
    第八课 最小生成树之Kruskal
    解决 Ubuntu 12.04 无法调节屏幕亮度的问题
  • 原文地址:https://www.cnblogs.com/yiludugufei/p/4476367.html
Copyright © 2011-2022 走看看