![Android开发实战:从学习到产品](https://wfqqreader-1252317822.image.myqcloud.com/cover/688/920688/b_920688.jpg)
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中常用的控件类
![](https://epubservercos.yuewen.com/065DC9/10080940803417301/epubprivate/OEBPS/Images/Figure-T83_128708.jpg?sign=1739282554-sWAWgE1o787oXgK0638L0hKxfPvO3lEf-0-406570afa772a663e2d49134d599e1a4)
通过第3章的讲解,读者应该已经明白了如何使用布局管理器,并明白了布局管理器在使用时需要配置很多属性,而这些属性是可以通过相对应的Java方法来操作的。同时第3章也简单介绍了如何使用一个控件,那就是直接将控件加入布局管理器中。除了这种方式外,还可以和布局管理器一样通过Activity程序来控制。同布局管理器一样,普通控件在使用时也需要配置很多属性,而这些属性也可以通过相对应的Java方法来操作。控件的常用属性很多,常用的却不多。同时不同的控件也有各自特有的属性,读者在使用过程中慢慢就能理解这些属性的意义了。控件中相同又最常用的属性还有几种,如表4-2所示。
表4-2 Android中常用的控件类
![](https://epubservercos.yuewen.com/065DC9/10080940803417301/epubprivate/OEBPS/Images/Figure-T83_128709.jpg?sign=1739282554-8nHDXbRX9qNyQmBD0j0do104tbb4vGQh-0-00d6d16b46131f73c649bcf5950bb3a0)
下面将通过实例来演示这些属性,在实例中还会涉及一些控件的特别属性。但是本书不会像其他书籍那样一下将所有的控件都讲解出来,这样会让刚刚接触Android的读者很难记忆。所以这里的实例将以TextView、Button、EditText、ImageView、RadioGroup、SeekBar、Dialog、Toast这几个最常用的控件为例,其余的控件会在之后的章节中通过实例一一展现,让读者在实例中慢慢理解。
1.TextView、Button、EditText、ImageView、RadioGroup、SeekBar控件的使用
创建一个Activity类ShowViewActivity,将对应的布局文件activity_show_view.xml修改如下:
![](https://epubservercos.yuewen.com/065DC9/10080940803417301/epubprivate/OEBPS/Images/Figure-P84_128711.jpg?sign=1739282554-8D9KGrbYVLjVjNUCdHczSnRUJpOEapnU-0-1d3d8d8e16342dc6d42756a8847ab5ff)
![](https://epubservercos.yuewen.com/065DC9/10080940803417301/epubprivate/OEBPS/Images/Figure-P85_128712.jpg?sign=1739282554-LoqGdLO79Bw642NtzBCmTOysqujoQQVB-0-6dd3441779fdd488c28977ed53aeda27)
在上述布局中用注释的方式给控件的一些属性做了解释。这里不再解释,运行工程,在模拟器上显示的界面如图4-1所示。
![](https://epubservercos.yuewen.com/065DC9/10080940803417301/epubprivate/OEBPS/Images/Figure-P86_71334.jpg?sign=1739282554-1PqkZMCVALnKDsexTngOweTaderOVCK6-0-199e5c507218e7fa6ed6411c24632b03)
图4-1 控件在布局中的显示效果
这里隐藏了图片和按钮,但是会发现一大块空白区域,这就是在设置ImageView不可见时使用的是invisible,这种方式还会占据控件。通过测试发现EditText也确实是智能输入数字。下面在Activity类中创建一个initView()方法,在initView()方法中通过findViewById(int id)方法获取相应的控件,最后在onCreate()方法中调用initView()方法。initView()代码如下:
![](https://epubservercos.yuewen.com/065DC9/10080940803417301/epubprivate/OEBPS/Images/Figure-P86_128713.jpg?sign=1739282554-izDQJgGsfzU23h6gqVShelLXJ5ypn0S7-0-e4f1b26d100f224860af208c20981736)
![](https://epubservercos.yuewen.com/065DC9/10080940803417301/epubprivate/OEBPS/Images/Figure-P87_71554.jpg?sign=1739282554-Rsly0xw02u1321gFsRpZ94FdwiR1MruC-0-f60ba1831afd202384cead1c13fc3deb)
图4-2 使用代码控制控件在布局中的显示
为了方便读者理解,在上述代码中做了很详细的注释。上述代码主要做了5件事:改变布局文件中的TextView文字;设置EditText的输入类型为Text;将Button按钮设置为可见;将ImageView按钮设置为可见,并修改图片;将id为“paiqiu”的选项设置为RadioGroup的默认选项。运行程序,在模拟器上显示的界面如图4-2所示。
通过这样一个实例,读者应该能够使用上述几个控件了,想要进一步精通只能靠以后的实践去积累了。在之后的内容中我们还会频繁使用上述几个控件,但会涉及新的属性、新的方法。
2.Toast控件的使用
Toast是Android中用来显示信息的一种机制,没有焦点,过一定的时间就会自动消失。使用Toast很简单,只需要设置要显示的内容、显示时长、显示位置之后调用show()方法就可以了。设置内容等的方式有两种,代码如下:
![](https://epubservercos.yuewen.com/065DC9/10080940803417301/epubprivate/OEBPS/Images/Figure-P87_128719.jpg?sign=1739282554-3WZJiGW73YSDGVRUaeoKJO3mJccKoHGg-0-1cf7f3f68b0b8fe6354f73f683fb1854)
上述代码在onCreate()方法中调用了toast()方法。运行程序,在中部和底部会依次出现两个Toast提示框。如图4-3所示为先出现的指定位置的Toast,图4-4所示为默认位置的Toast。
其实,还有一种可以自定义Toast布局的方法来显示Toast,只不过在实际开发中并不常用,这里仅给出代码,不做分析,读者如有兴趣可以自行尝试。
![](https://epubservercos.yuewen.com/065DC9/10080940803417301/epubprivate/OEBPS/Images/Figure-P88_71575.jpg?sign=1739282554-SZHfkk62x2pMGESE7UELhEi6I5xs5Lhf-0-8fefcd8c67f0d4cbdf4e8e3162a4825a)
图4-3 指定位置的Toast
![](https://epubservercos.yuewen.com/065DC9/10080940803417301/epubprivate/OEBPS/Images/Figure-P88_71576.jpg?sign=1739282554-86a5zLMAWT7tm1AGEWL8gFLndKeSffeO-0-c574e1cea3aeb7a64b406e511315703b)
图4-4 默认的Toast
![](https://epubservercos.yuewen.com/065DC9/10080940803417301/epubprivate/OEBPS/Images/Figure-P88_128721.jpg?sign=1739282554-Vjk3rp9njrBOXhNC1emJRk3LuIfYQ1hr-0-c4146877ae7c23b7bb145be1848392be)
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()方法中调用它。代码如下:
![](https://epubservercos.yuewen.com/065DC9/10080940803417301/epubprivate/OEBPS/Images/Figure-P89_128726.jpg?sign=1739282554-lNyvVXC86osXOWe8brWmz5wx7cPiRapy-0-635eea43448725f2a151c3c69989aecc)
![](https://epubservercos.yuewen.com/065DC9/10080940803417301/epubprivate/OEBPS/Images/Figure-P90_128727.jpg?sign=1739282554-Qe6IX3ovBjsbQQVGGSxHsYUfRTIQqGtA-0-ae4c206e60a163895180a1b7f64133d8)
由于在代码中做了很好的注释,因此对代码内容不再做更多解释。运行工程,自定义Dialog的效果如图4-5所示,自定义Toast的效果如图4-6所示。
![](https://epubservercos.yuewen.com/065DC9/10080940803417301/epubprivate/OEBPS/Images/Figure-P90_71940.jpg?sign=1739282554-oXvZLlqu6jqjyKysXnm78fh8N7LHbLUr-0-89aeb08d8e20f30ba27244a6fd1e3a09)
图4-5 默认的Dialog
![](https://epubservercos.yuewen.com/065DC9/10080940803417301/epubprivate/OEBPS/Images/Figure-P90_71941.jpg?sign=1739282554-a4mJnND8AEllBI2ZHY2GOeSiiksPEADd-0-00e9c647d44ea85c72cd818d6abc6eba)
图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单位,如需要在屏幕上画一条细的分隔线时。