4Android用户界面 1. 本章概述 通过本章的学习,掌握Android常用布局管理器的用法,通过综合运用各种布局管理器实现复杂界面的设计。本章详细介绍Android常用组件的知识,并通过实例的实现过程讲解各个组件的使用方法。 2. 本章重点与难点 1) 重点 (1) 常用布局管理器。 (2) 常用UI控件。 (3) 复杂UI控件。 (4) Android资源。 2) 难点 (1) ListView与RecycleView控件的用法。 (2) 图像状态资源的使用。 3. 重难点学习建议 本章主要帮助读者学习并掌握Android中布局管理器的应用,读者在学习中要深入理解各个布局管理器的常用参数。Android应用程序的人机交互界面由许多Android控件组成,这些控件是直接与用户交互的对象,掌握好这些控件对我们在以后的开发中会起到至关重要的作用。多看案例,多思考,多动手实践,从而能够熟练地综合应用各个布局管理器及常用控件搭建出需要实现的界面。本章所涉及的资源文件是读者比较容易忽略的章节,读者往往会感觉学习难度不大,在实际应用中很多时候会因为不注意对资源的使用产生各种各样的错误。学习本章应重点掌握不同资源文件存放的位置、资源的属性、调用的方法等内容。熟练掌握并使用字符串资源、图片资源、值资源、风格与主题资源、动画资源等知识,学好使用资源文件是安卓开发的重中之重。4.1界 面 布 局 界面布局(Layout)是用户界面结构的描述,定义了界面中所有的元素、结构和相互关系。在Android中,每个控件在窗体中都有具体的位置和尺寸,在窗体中摆放各种控件时,很难准确判断控件的具体位置和大小,不过使用Android的布局管理器可以很方便地控制各个控件的位置和大小。Android中的布局是一个容器,在此容器中可放置其他控件,大部分容器控件继承ViewGroup类。在Android应用中,用户界面布局可以使用XML描述。Android Studio提供一套富布局编辑器,开发者可以在其中随意拖曳各类用户界面组件进行布局构建,还可以在多屏幕配置中同时查看多种布局的显示效果。 在Android中,提供了一种非常简单、方便的方法用于控制UI界面。该方法采用XML文件来进行界面布局,从而将布局界面的代码和逻辑控制的代码分离开来,使程序的结构更加清晰、明了。使用XML布局文件控制UI界面可以分为以下两个关键步骤。 (1) 在Android应用的res/layout目录下编写XML布局文件,可以是任何符合Java命名规则的文件名。创建后,R.java会自动收集该布局资源。 (2) 在Activity中使用以下代码加载XML文件中布局的内容。setContentView(R.layout. activity_main); 在上面的代码中,activity_main是XML布局文件的文件名。 通过上面的代码步骤就可轻松实现布局并显示UI界面功能了。 4.1.1线性布局 线性布局(LinearLayout)是布局中最常用的一种布局,它按照垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后。如果是垂直排列,那么将是一个N行单列的结构,每一行只会有一个元素,而不论这个元素的宽度为多少;如果是水平排列,那么将是一个单行N列的结构。如果搭建两行两列的结构,通常的方式是先垂直排列两个元素,每一个元素里再包含一个LinearLayout进行水平排列。 LinearLayout属性中的android:orientation属性是设置线性布局方向的,当其值为vertical时,为垂直线性布局,当其值为horizontal时,为水平线性布局。 再来看一下android:layout_gravity 和 android:gravity的使用,这两个属性看起来有些相似,都是设置对齐方式的,那么这两个属性有什么区别呢?其实从名字上就可以看出,android:gravity 是用于指定文字在控件中的对齐方式,而 android:layout_gravity 是用于指定控件在布局中的对齐方式。android:layout_gravity 的可选值和 android:gravity 差不多,但是需要注意,当 LinearLayout 的排列方向是 horizontal 时,只有垂直方向上的对齐方式才会生效,因为此时水平方向上的长度是不固定的,每添加一个控件,水平方向上的长度都会改变,因而无法指定该方向上的对齐方式。同样的道理,当 LinearLayout 的排列方向是 vertical 时,只有水平方向上的对齐方式才会生效。这两个属性的可选值也是相同的,包括: top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical。而且这些属性是可以多选的,用“|”分开。默认值是: Gravity.LEFT。对这些属性的描述如表4.1所示。表4.1android:layout_gravity和android:gravity属性取值 取值说明top将对象放在其容器的顶部,不改变其大小bottom将对象放在其容器的底部,不改变其大小left将对象放在其容器的左侧,不改变其大小right将对象放在其容器的右侧,不改变其大小center_vertical将对象纵向居中,不改变其大小,垂直对齐方式:垂直方向居中对齐fill_vertical必要的时候增加对象的纵向大小,以完全充满其容器;垂直方向填充center_horizontal将对象横向居中,不改变其大小;水平对齐方式:水平方向居中对齐fill_horizontal必要的时候增加对象的横向大小,以完全充满其容器;水平方向填充center将对象横纵居中,不改变其大小fill必要的时候增加对象的横纵向大小,以完全充满其容器clip_vertical附加选项,用于按照容器的边来剪切对象的顶部和/或底部的内容。剪切基于其纵向对齐设置:顶部对齐时,剪切底部;底部对齐时剪切顶部;除此之外,剪切顶部和底部;垂直方向裁剪clip_horizontal附加选项,用于按照容器的边来剪切对象的左侧和/或右侧的内容。剪切基于其横向对齐设置:左侧对齐时,剪切右侧;右侧对齐时,剪切左侧;除此之外,剪切左侧和右侧;水平方向裁剪【例4.1】android:orientation、android:layout_gravity 和 android:gravity的使用。