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系统定义了四种像素密度:

这里写图片描述

基本用法

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


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

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

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

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

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

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

引用

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灯塔@kuaidao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值