Android开发中的各种尺度单位

前言

过去,程序员通常以像素为单位设计计算机用户界面。例如:图片大小为80×32像素。这样处理的问题在于,如果在高分辨率显示器上运行该程序,则用户界面会显得很小。在有些情况下,用户界面可能会小到难以看清内容。由此我们采用与分辨率无关的度量单位来开发程序就能够解决这个问题。Android应用开发支持不同的度量单位。

度量单位含义

dip:
Density Independent Pixel(设备独立像素). 不同设备有不同的显示效果,这个和物理设备硬件有关,不依赖像素。

Dp
是 Android 建议使用的一种虚拟像素单位,可以使定义的UI布局在不同像素密度的设备上具有相同的效果。
像素密度dip = 每英寸长度含有的像素点数量 = 屏幕纵向(横向)长度 / 屏幕纵向(横向)像素数目。
这种密度无关像素尺寸等同于160 dpi 屏幕上的一个物理像素。所以 pixels = dp * (density / 160) 推导出来 1px = 160dpi ( 1 / 160),也就是说在每英寸长度含有160个像素点的屏幕上 1px =1dp。

看下面几个转化公式

public static float dp2px(@NonNull Resources resources, @FloatRange(from = 0) float dp) {
    final float scale = resources.getDisplayMetrics().density;
    return dp * scale + 0.5f;
}

/**
 * 根据手机的分辨率从 px(像素)的单位转成 dp
 */
public static float px2dp(@NonNull Context pContext, @FloatRange(from = 0) float px) {
    return px2dp(pContext.getResources(), px);
}

public static float px2dp(@NonNull Resources resources, @FloatRange(from = 0) float px) {
    final float scale = resources.getDisplayMetrics().density;
    return px / scale + 0.5f;
}

px: pixels(像素).

不同设备显示效果相同,像素(pixel),表示屏幕上一个物理像素点 不建议直接使用 px 绘制UI,因为受像素密度的影响,以 px 为单位绘制的UI在不同手机上显示的实际大小会不同

pt: point

是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用;

sp: scaled pixels

(放大像素). 主要用于字体显示。

in(英寸)

长度单位。 很少使用

mm(毫米)

长度单位。 很少使用

android系统定义了四种像素密度:

Android开发中的各种尺度单位_第1张图片

基本用法

文字尺寸用sp为单位,非文字的尺寸用dp作单位。特殊情况使用px单位,例如定义分隔线时使用宽度为1px的细线 。


贴了这么多,还是提几个问题。

1.设计给的背景图是固定尺寸例如 640*180,那么是否意味着,使用布局宽高设置成wrap_content,可以自动适应屏幕?

2.既然dp可以自动适配不同屏幕,上面已经介绍了,与屏幕分辨率无关。那么将布局宽高设置成 640dp * 180dp 是否可以自动适应屏幕宽高呢?

3.或者说只限制高,宽度march 屏幕,是否也可以自动适配效果。

4.如果上面几个问题都不能让图片跟随设备分辨率自适应宽高,那么有没有方法将宽高进行自动适配?方式是什么?

思考一下…. 下篇给出具体的答案。

引用

各种尺寸 : http://blog.csdn.net/tobacco5648/article/details/52260318

你可能感兴趣的:(android,基础知识)