• 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());
    }
    

      

  • 相关阅读:
    android彻底结束进程的两种方法
    清理软件缓存
    android webview 设置
    创建和使用Android library工程
    如何使Android应用程序获得root权限
    自动安装mysql5.7shell脚本实现与ansible脚本实现
    老生常谈:Asp.net Mvc 3 加载cshtml文件创建自定义分页
    老生常谈: Asp.net Mvc3 加载cshtml文件自定义分页+ 查询
    Razor API翻译
    Asp.net MVC 3使用 Area 小结
  • 原文地址:https://www.cnblogs.com/xiaocai20091687/p/xiaocai_android_new_8.html
Copyright © 2020-2023  润新知