zoukankan      html  css  js  c++  java
  • Android开发系列之屏幕密度和单位转换

          由于Android的开源性,所以目前市面上面Android手机的分辨率特别多,这样的话就给我适配带来了一定的难度。要想做好适配,我们首先应该明白什么是分辨率、PPI、屏幕大小等概念,还有在不同的屏幕密度下,各个单位之间的转换关系。

          屏幕大小指屏幕对角线的长度,通常使用“寸”来度量。

          分辨率是指手机屏幕的像素点个数,例如720X1280就是指屏幕的宽有720个像素点,而高有1280个像素点。

          DPI每英寸像素,它是由对角线的像素点数除以屏幕的大小得到的。所以屏幕的密度对应关系为:,正是由于各种屏幕密度的不同,导致同样像素大小的长度,在不同密度的屏幕上显示长度不同。

           Android系统使用mdpi即密度值为160的屏幕作为标准,在这个屏幕上1px=1dp。其他屏幕则可以通过比例进行换算,在mdpi中1dp=1px,在hdpi中1dp=1.5px,在xhdpi中1dp=2px,在xxxhdpi中1dp=3px。由此我们可以得到各个分辨率直接的换算比例,ldpi:mdpi:hdpi:xhdpi:xxhdpi=3:4:6:8:12。

           下面提供各个单位之间的转换代码:

    public class DisplayUtil{
    
           public static int px2dip(Context context,float pxValue){
                  final float scale=context.getResources().getDisplayMetrics().density;
                  return (int)(pxValue/scale+0.5f);
           }
    
           public static int dip2px(Context context,float dipValue){
                   final float scale=context.getResources().getDisplayMetrics().density;
                   return (int)(dipValue * scale +0.5f);
           }
    
           public static int px2sp(Context context,float pxValue){
                   final float scale=context.getResources().getDisplayMetrics().density;
                   return (int)(pxValue/fontScale +0.5f);
           }
    
           public static int sp2px(Context context,float pxValue){
                   final float scale=context.getResources().getDisplayMetrics().density;
                   return (int)(pxValue*fontScale +0.5f);
           }
    }
    

       其中density就是前面所说的换算比例,同时,系统也提供了TypedValue类帮助我们转换,代码示例如下:

    protected int dp2px(int dp){
          return (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,dp,getResources().getDisplayMetrics());
    }
    
    protected int sp2px(int sp){
          return (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,sp,getResources().getDisplayMetrics());
    }
    

      

  • 相关阅读:
    项目部署到tomcat,浏览器能够访问,手机不能访问。
    项目部署到tomcat上
    MySQL触发器的使用
    支付宝接口的使用
    Oracle RAC管理及维护命令详解
    SQL调优(SQL TUNING)并行查询提示(Hints)之pq_distribute的使用
    Oracle12c中容错&性能新特性之表空间组
    一个典型的多表参与连接的复杂SQL调优(SQL TUNING)引发的思考
    默然回首繁忙而充实的2016
    一副美丽而庞大的SQL TUNING计划美图
  • 原文地址:https://www.cnblogs.com/xiaocai20091687/p/xiaocai_android_new_8.html
Copyright © 2011-2022 走看看