px,dpi,dip 这三个东西大家都有了解,这3个都是单位,其中前2个单位在很多别的地方都有使用,但是dip这个单位是Android用来解决不同分辨率屏幕适配的一种方案,也就是大家熟知的dp。

px

全拼pixel,我们常说的像素,构成我们屏幕上图像的最小单位

dpi

作为屏幕分辨率单位如果只有px,明显太单薄了,于是有了dpi这个新单位。
dpi一种像素密度,英文全称是 Dots Per Inch 字面上意思也很好理解,就是指每英寸的像素数量,这里Inch是英寸。1英寸 = 2.54cm,我们项目中的res中的 hdpi,xdpi,xhdpi就是用的这个单位。一般情况 ldpi是120,mdpi是160,hdpi是240,xhdpi是320。

dip

由于Android手机各式各样,我们开发时必然会遇到坑爹的屏幕适配问题,这里Android就用了 dip这个单位。dip 全称是Density-independent pixel 翻译过来就是 像素无关密度 他的大小就是一个1个dpi 有160个像素的屏幕大小,他的计算公式也很简单。从他的定义就可以看出来:
dip = 160px/dpi
px = dip*dpi/160

试想现在有2个屏幕,屏幕的大小都是1寸,A屏幕密度为160,B屏幕密度为320。要去显示一个为宽度为80按钮button。如果用px为单位,A屏幕上button占屏幕的一半0.5寸,B屏幕上button占屏幕的四分之一 0.25寸,小了一半。如果用dip 为单位 80dip
A屏幕上的大小是:80*160/160=80px
B屏幕上的大小 : 80*320/160 = 160px
由于B的密度是A的2倍,现在B屏幕上button的大小自动增加了一倍,这样在A和B屏幕上button可以显示相同的大小了。使用dip这个单位也就达到了适配的目的,顺便说一句dip原本是dip,为了和sp这个单位同意,改名成了dp。

获取屏幕分辨率的方法

获取屏幕分辨率有2种方法:

方法一 :

Display mDisplay = getWindowManager().getDefaultDisplay();    int W = mDisplay.getWidth();    int H = mDisplay.getHeight();

这里的w,h 就是屏幕的宽高分辨率

方法二 :

DisplayMetrics mDisplayMetrics = new DisplayMetrics();    getWindowManager().getDefaultDisplay().getMetrics(mDisplayMetrics);    int W = mDisplayMetrics.widthPixels;    int H = mDisplayMetrics.heightPixels;

同样这里的w,h 就是屏幕的宽高分辨率
既然我们已经学习了dpi当然也要知道怎么去获取也很简单

DisplayMetrics dm = new DisplayMetrics();    dm = getResources().getDisplayMetrics();    int dpi = dm.densityDpi;

dpi就是屏幕密度了。下面用一个简单的例子总结

public class MainActivity extends Activity {@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        DisplayMetrics dm = new DisplayMetrics();        dm = getResources().getDisplayMetrics();        int dpi = dm.densityDpi;        int widthPx = dm.widthPixels;        int heightPx = dm.heightPixels;        Log.d("MainActivity", "dpi : "+dpi);        Log.d("MainActivity", "widthPx : "+widthPx);        Log.d("MainActivity", "heightPx : "+heightPx);        }    }

更多相关文章

  1. android实现屏幕滑动(类似主屏滑动第一屏---->到第2屏)
  2. Android像素单位dp、sp、px、pt的区别和比较
  3. [置顶] 新修改ADB,支持Android(安卓)4.2 系统 ,全部中文命令,手机屏
  4. Android(安卓)UI总结 Android(安卓)和H5 字体大小适配
  5. 探究Android的多分辨率支持以及各种类型图标尺寸大小
  6. 【凯子哥带你夯实应用层】Android的Google官方设计指南(上)
  7. 牛逼的Android(安卓)UI--第18章 与用户交互相关的设计模式 (中)
  8. 第三部分:Android(安卓)应用程序接口指南---第三节:应用程序资源--
  9. android主要类解析 Activity ,Intent ,IntentReceiver,Service ,

随机推荐

  1. Android离线安装方法
  2. Android中的手势识别
  3. android gen文件不生成、R文件报错
  4. Android(安卓)动画
  5. Android开发教程大全介绍
  6. Android(安卓)下面的一些命令
  7. Android,似乎没那么友好......
  8. android 布局属性详解
  9. android4.0 添加一个新的android 键值
  10. [Android(安卓)UI界面] 求助大神!selector