再看屏幕适配

来源:互联网 发布:手机理发软件 编辑:程序博客网 时间:2024/06/15 00:04

基本概念

  • 屏幕尺寸:屏幕对角线长度,单位英寸,常见5.0,5.5,6.0
  • 屏幕分辨率:横纵像素点数 ,单位px 1960*108,ui设计多以此为设计单位
  • 像素密度:dpi(dot per inch)顾名思义
  • ppi 跟dpi一个意思
  • dip 又叫dp: 密度无关像素(Density Independent Pixels)在像素密度为160dpi的情况下,dp和px如何换算呢?在Android中,规定以像素密度为160dpi为基准,1dip(or dp)=1px,如果密度为320dpi,则1dip=2px,以此类推。它至少能解决一个问题,就是你在布局文件写某个View的宽和高为160dp*160dp,这个View在任何分辨率的屏幕中,显示的尺寸大小是大约是一致的(可能不精确),大概是 1 inch * 1 inch。dp能够让同一数值在不同的分辨率展示出大致相同的尺寸大小。但是当设备的尺寸差异较大的时候,就无能为力了。适配的问题还需要我们自己去做,这个通过下图可以计算出来
密度类型 代表的分辨率(px) 屏幕密度(dpi) 换算(px/dp) 比例 低密度(ldpi) 240*320 120 1dp=0.75px 3 中密度(mdpi) 320*480 160 1dp=1px 4 高密度(hdpi) 480*800 240 1dp1.5px 6 超高密度(xhdpi) 720*1280 320 1dp=2px 8 超超高密度(xxhdpi) 1080*1920 480 1dp=3px 12

android.util.TypedValue类提供了一个函数,支持把所有的单位换算到px,实现代码如下:

public static float applyDimension(int unit, float value,                                     DisplayMetrics metrics)  {      switch (unit) {      case COMPLEX_UNIT_PX:          return value;      case COMPLEX_UNIT_DIP:          return value * metrics.density;      case COMPLEX_UNIT_SP:          return value * metrics.scaledDensity;      case COMPLEX_UNIT_PT:          return value * metrics.xdpi * (1.0f/72);      case COMPLEX_UNIT_IN:          return value * metrics.xdpi;      case COMPLEX_UNIT_MM:          return value * metrics.xdpi * (1.0f/25.4f);      }      return 0;  }  

厂商一般会指明3个基本参数,屏幕尺寸,分辨率和ppi,根据这三个值,可算出屏幕长宽

Google官方按一下标准区分
这里写图片描述

图片适配
在设计图标时,对于五种主流的像素密度(MDPI、HDPI、XHDPI、XXHDPI 和 XXXHDPI)应按照 2:3:4:6:8 的比例进行缩放。例如,一个启动图标的尺寸为48x48 dp,这表示在 MDPI 的屏幕上其实际尺寸应为 48x48 px,在 HDPI 的屏幕上其实际大小是 MDPI 的 1.5 倍 (72x72 px),在 XDPI 的屏幕上其实际大小是 MDPI 的 2 倍 (96x96 px),依此类推。