07. 常用的UI控件

2021/8/7 Android 开发基础

UI 控件的使用是 Android 界面构建的重要组成部分,其中 Android 提供了很多基础的控件,如:TextViewButtonImageViewEditTextListView等等常用的控件,我们可以直接使用或者组合新的控件使用。

开始之前先来介绍和了解一下 Android 的 UI 中常用的布局大小尺寸相关单位的知识。

由于 Android 厂商非常多,各种尺寸的 android 手机、平板、设备层出不穷,Google 公司为了解决分辨率过多的问题,在 Android 的开发文档中定义了pxdip(dp)sp,方便开发者适配不同分辨率的Android设备,对于一名合格程序员来说理解并掌握适配是必须的。

基础概念 :

名称 解释
px 像素点,一个像素点为1px
dp 即dip,像素密度
sp 同dp,但是可以根据系统字体偏好缩放
dpi 每英寸的像素数,也叫做屏幕密度

先来了解一下dpi,dpi 全称是 dots per inch,对角线每英寸的像素点的个数,也是衡量设备显示精细度效果的重要参数

计算公式如下:

dpi计算公式示意图

height和width即为长宽的像素,平方和即为对角线的像素个数,size即我们常说的5寸手机、4寸手机中的5和4,即对角线的长度。所以,一同尺寸的手机,分辨率越高,dpi越高。分辨率相同,屏幕对角线英寸数越小,dpi越高。

dp 也叫 dip,是 device independent pixels,设备不依赖像素的一个单位。安卓开发用的单位,官方规定:当设备的 dpi 为 160dpi 时,1dp=1px。

计算公式如下:

px&dp计算公式示意图

如:将一个控件设置长度为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 的常用控件和使用。