UI 控件的使用是 Android 界面构建的重要组成部分,其中 Android 提供了很多基础的控件,如:TextView
、Button
、ImageView
、EditText
、ListView
等等常用的控件,我们可以直接使用或者组合新的控件使用。
开始之前先来介绍和了解一下 Android 的 UI 中常用的布局大小尺寸相关单位的知识。
由于 Android 厂商非常多,各种尺寸的 android 手机、平板、设备层出不穷,Google 公司为了解决分辨率过多的问题,在 Android 的开发文档中定义了px
、dip(dp)
、sp
,方便开发者适配不同分辨率的Android设备,对于一名合格程序员来说理解并掌握适配是必须的。
基础概念 :
名称 | 解释 |
---|---|
px | 像素点,一个像素点为1px |
dp | 即dip,像素密度 |
sp | 同dp,但是可以根据系统字体偏好缩放 |
dpi | 每英寸的像素数,也叫做屏幕密度 |
先来了解一下dpi,dpi 全称是 dots per inch
,对角线每英寸的像素点的个数,也是衡量设备显示精细度效果的重要参数。
计算公式如下:
height和width即为长宽的像素,平方和即为对角线的像素个数,size即我们常说的5寸手机、4寸手机中的5和4,即对角线的长度。所以,一同尺寸的手机,分辨率越高,dpi越高。分辨率相同,屏幕对角线英寸数越小,dpi越高。
dp 也叫 dip,是 device independent pixels
,设备不依赖像素的一个单位。安卓开发用的单位,官方规定:当设备的 dpi 为 160dpi 时,1dp=1px。
计算公式如下:
如:将一个控件设置长度为1dp,那么在160dpi上该控件长度为1px,在240dpi的屏幕上该控件的长度为1*240/160=1.5个像素点。
px 和 dp之间的关系,android中的dp在渲染前会将dp转为px,计算公式:
- px = density * dp;
- density = dpi / 160;
- px = dp * (dpi / 160);
其中density 在每个设备上都是固定的,DPI / 160 = density,屏幕的总 px 宽度 / 屏幕的总 dp 宽度 = density(可以理解1dp中包含像素的个数)
Android 中 px 与 dp 互转方式:
/**
* dp 转成为 px
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* px 转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
之所以后面加上0.5f是因为 float 类型的 1.1 和1.9 强转成int类型后,会失去精准度变成 int类型的1, 而如果咱们想四舍五入的话,把他们都加上0.5f,这样转换出来的结果就是:
1.4 + 0.5 = 1.9 转为int 还是1,而1.5 + 0.5 = 2.0 转换成int后就是2,正好是四舍五入,这样就保证值相对精准。
接下来篇章将主要来介绍 Android 的常用控件和使用。