4.1 常用基本控件的使用

在Android开发中,需要使用的控件很多,除了之前提到过的TextView、Button、EditText,还有RadioGroup、CheckBox、Spinner、ImageView等一大批控件。这些控件构成了Android图形界面开发的基石。同时,在使用这些控件时需要设置它们的宽与高,使用文字时需要设置自提点大小,这又将涉及Android中的尺寸问题。本节将重点讲解控件的使用,同时简单介绍Android的尺寸问题。

4.1.1 基本控件的使用

就像第3章所叙述的那样,Android中的控件类都是android.view.View类的子类,都在android.wegdit包下,除了TextView、Button之外,还有很多控件类。总结起来,Android中常用的控件类如表4-1所示。

表4-1 Android中常用的控件类

通过第3章的讲解,读者应该已经明白了如何使用布局管理器,并明白了布局管理器在使用时需要配置很多属性,而这些属性是可以通过相对应的Java方法来操作的。同时第3章也简单介绍了如何使用一个控件,那就是直接将控件加入布局管理器中。除了这种方式外,还可以和布局管理器一样通过Activity程序来控制。同布局管理器一样,普通控件在使用时也需要配置很多属性,而这些属性也可以通过相对应的Java方法来操作。控件的常用属性很多,常用的却不多。同时不同的控件也有各自特有的属性,读者在使用过程中慢慢就能理解这些属性的意义了。控件中相同又最常用的属性还有几种,如表4-2所示。

表4-2 Android中常用的控件类

下面将通过实例来演示这些属性,在实例中还会涉及一些控件的特别属性。但是本书不会像其他书籍那样一下将所有的控件都讲解出来,这样会让刚刚接触Android的读者很难记忆。所以这里的实例将以TextView、Button、EditText、ImageView、RadioGroup、SeekBar、Dialog、Toast这几个最常用的控件为例,其余的控件会在之后的章节中通过实例一一展现,让读者在实例中慢慢理解。

1.TextView、Button、EditText、ImageView、RadioGroup、SeekBar控件的使用

创建一个Activity类ShowViewActivity,将对应的布局文件activity_show_view.xml修改如下:

在上述布局中用注释的方式给控件的一些属性做了解释。这里不再解释,运行工程,在模拟器上显示的界面如图4-1所示。

图4-1 控件在布局中的显示效果

这里隐藏了图片和按钮,但是会发现一大块空白区域,这就是在设置ImageView不可见时使用的是invisible,这种方式还会占据控件。通过测试发现EditText也确实是智能输入数字。下面在Activity类中创建一个initView()方法,在initView()方法中通过findViewById(int id)方法获取相应的控件,最后在onCreate()方法中调用initView()方法。initView()代码如下:

图4-2 使用代码控制控件在布局中的显示

为了方便读者理解,在上述代码中做了很详细的注释。上述代码主要做了5件事:改变布局文件中的TextView文字;设置EditText的输入类型为Text;将Button按钮设置为可见;将ImageView按钮设置为可见,并修改图片;将id为“paiqiu”的选项设置为RadioGroup的默认选项。运行程序,在模拟器上显示的界面如图4-2所示。

通过这样一个实例,读者应该能够使用上述几个控件了,想要进一步精通只能靠以后的实践去积累了。在之后的内容中我们还会频繁使用上述几个控件,但会涉及新的属性、新的方法。

2.Toast控件的使用

Toast是Android中用来显示信息的一种机制,没有焦点,过一定的时间就会自动消失。使用Toast很简单,只需要设置要显示的内容、显示时长、显示位置之后调用show()方法就可以了。设置内容等的方式有两种,代码如下:

上述代码在onCreate()方法中调用了toast()方法。运行程序,在中部和底部会依次出现两个Toast提示框。如图4-3所示为先出现的指定位置的Toast,图4-4所示为默认位置的Toast。

其实,还有一种可以自定义Toast布局的方法来显示Toast,只不过在实际开发中并不常用,这里仅给出代码,不做分析,读者如有兴趣可以自行尝试。

图4-3 指定位置的Toast

图4-4 默认的Toast

3.Dialog控件的使用

Dialog控件在应用中是必不可少的一个组件,在Android中也不例外。Dialog控件会提示一些重要信息,同时对一些需要用户额外交互的内容也很有帮助。一个Dialog就是一个小窗口,并不会填满整个屏幕,通常是以模态显示,要求用户必须采取行动才能继续进行剩下的操作。Android中提供了丰富的对话框支持,通常包括如下4种常用的对话框:

• AlertDialog 警告对话框,是使用最广泛、功能最丰富的一个对话框。

• ProgressDialog 进度条对话框,只是对进度条进行了简单的封装。

• DatePickerDialog 日期对话框。

• TimePickerDialog 时间对话框。

所有的对话框都直接或间接继承自Dialog类,而AlterDialog直接继承自Dialog,其他的几个类均继承自AlterDialog。在实际开发中主要使用的是AlertDialog以及由AlertDialog自定义而来的对话框,所以本部分主要讲解AlertDialog。

AlterDialog可以包含一个标题、一个内容消息或者一个选择列表、最多3个按钮。推荐使用一个内部类AlterDialog.Builder来创建AlterDialog。使用Builder对象可以设置AlterDialog的各种属性,再通过Builder.create()就可以得到AlterDialog对象。如果只是需要显示AlterDialog,一般可以直接使用Builder.show()方法,返回一个AlterDialog对象,并且显示AlterDialog。

如果仅仅是需要提示一段信息给用户,就可以直接使用AlterDialog的一些属性设置提示信息,涉及的方法有:

• AlterDialog create() 根据设置的属性创建一个AlterDialog。

• AlterDialog show() 根据设置的属性创建一个AlterDialog,并显示在屏幕上。

• AlterDialog.Builder setTitle() 设置标题。

• AlterDialog.Builder setIcon() 设置标题的图标。

• AlterDialog.Builder setMessage() 设置标题的内容。

• AlterDialog.Builder setCancelable() 设置是否模态,一般设置为false,表示模态,要求用户必须采取行动才能继续进行剩下的操作。

下面通过一个实例来展示AlertDialog的使用。在Activity中创建一个myDialog()方法,并在onCreate()方法中调用它。代码如下:

由于在代码中做了很好的注释,因此对代码内容不再做更多解释。运行工程,自定义Dialog的效果如图4-5所示,自定义Toast的效果如图4-6所示。

图4-5 默认的Dialog

图4-6 默认的Toast

4.1.2 Android中的尺寸问题

通过前一部分的学习,可以发现不管是字体设置还是控件宽高的设置都需要尺寸,尺寸的设置会极大地影响UI界面的开发质量。

过去,程序员通常以像素为单位设计计算机用户界面,例如图片大小为80×32(像素)。这样处理的问题在于,如果在一个每英寸点数(dpi)更高的新显示器上运行该程序,那么用户界面会显得很小。在有些情况下,用户界面可能会小到难以看清内容。为了解决这个问题,Android中采用了与分辨率无关的度量单位来开发程序。Android应用开发支持不同的度量单位,常用的尺寸主要有px、dp、sp。

(1)px,即像素,1px代表屏幕上一个物理像素点。在Android中px单位不被建议使用,因为同样像素的图片在不同手机上显示的实际大小可能不同。

(2)dp,这是最常用但也最难理解的尺寸单位。它与“像素密度”密切相关,所以这里首先解释一下什么是像素密度。假设有一部手机,屏幕的物理尺寸为1.5英寸×2英寸,屏幕分辨率为240×320,就可以计算出在这部手机屏幕上每英寸包含的像素点的数量为240/1.5=160dpi(横向)或320/2=160dpi(纵向),160dpi就是这部手机的像素密度。像素密度的单位dpi是Dots Per Inch的缩写,即每英寸像素数量。横向和纵向的值都是相同的,因为大部分手机屏幕使用正方形的像素点。

不同的手机/平板可能具有不同的像素密度,例如同为4寸手机,有480×320分辨率的,也有800×480分辨率的,前者的像素密度就比较低。Android系统定义了4种像素密度:低(120dpi)、中(160dpi)、高(240dpi)和超高(320dpi),对应的dp到px的系数分别为0.75、1、1.5和2,这个系数乘以dp长度就是像素数。例如,界面上有一个长度为80dp的图片,那么它在240dpi的手机上实际显示为80×1.5=120px,在320dpi的手机上实际显示为80×2=160px。将这两部手机放在一起对比,就会发现这个图片的物理尺寸“差不多”。

(3)sp,与缩放无关的抽象像素(Scale-independent Pixel)。sp和dp类似,唯一的区别就是Android系统允许用户自定义文字尺寸大小(小、正常、大、超大等)。当文字尺寸是“正常”时1sp=1dp=0.00625英寸,而当文字尺寸是“大”“或”“超大”时1sp>1dp=0.00625英寸,类似于我们在Windows里调整字体尺寸以后的效果:窗口大小不变,只有文字大小改变。

在经过长时间的开发实践后,最终总结出了使用这几种尺寸的规律:文字的尺寸一律用sp单位,非文字的尺寸一律使用dp单位,只有在一些特殊时候才会使用px单位,如需要在屏幕上画一条细的分隔线时。