第3章Android基础界面编程 Android程序开发主要分为三部分: 界面设计、代码流程控制和资源建设。代码和资源主要是由开发者进行编写和维护的,对于大部分用户来说是不关心的,展现在用户面前最直观的就是界面设计。作为一个程序设计者,必须首先考虑用户的体验,只有用户满意了开发的产品,应用才能推广,才有价值,因此界面设计尤为重要。 控件是Android项目开发的基本组成单位,通过使用组件可以高效地开发Android程序,所以熟练掌握控件的使用是进行Android程序开发的重要前提。本章对“购物商城”基本组件进行分析,认识常用基础控件和布局管理器的使用方法。通过对基础控件和布局管理器的综合运用实现“欢乐购商城”登录、注册、首页表格等页面。 本章要点 (1) 掌握文本显示框的功能和用法。 (2) 熟悉文本编辑框的常用属性。 (3) 掌握按钮的简单用法。 (4) 掌握图片的使用方法。 (5) 掌握线性布局的功能和用法。 (6) 熟悉表格布局的功能和用法。 (7) 掌握相对布局的功能和用法。 (8) 掌握网格布局的功能和用法。 (9) 掌握布局的嵌套使用。 视频详解 3.1基础View组件简介 “欢乐购商城”项目中每个页面中都运用了Android基础界面控件,本节运用基础界面控件实现“欢乐购商城”登录页面、注册页面。 分析: 登录页面整体采用垂直方向线性布局,从上往下摆放图片(ImageView)、文本编辑框(EditText)、按钮(Button)、文本显示框(TextView)基础控件,如图31所示。 注册页面整体采用垂直方向线性布局,从上往下摆放图片(ImageView)、文本编辑框(EditText)、按钮(Button),如图32所示。 图31登录页面 图32注册页面 Android中所有的组件都继承于View类,View类代表的就是屏幕上的一块空白的矩形区域,该空白区域可用于绘画和事件处理。不同的界面组件,相当于对这个矩形区域做了一些处理,如文本显示框、按钮等。 View类有一个重要的子类: ViewGroup。ViewGroup类是所有布局类和容器组件的基类,它是一个不可见的容器,它里面还可以添加View组件或ViewGroup组件,主要用于定义它所包含的组件的排列方式,例如,网格排列或线性排列等。通过View和ViewGroup的组合使用,从而使得整个界面呈现一种层次结构。ViewGroup内包含的组件如图33所示。 图33ViewGroup组件的层次结构 Android中控制组件的显示有两种方式: 一种是通过XML布局文件来设置组件的属性进行控制; 另一种是通过Java代码调用相应的方法进行控制。这两种方式控制Android界面显示的效果是完全一样的。实际上,XML文件的属性与Java代码中方法之间存在着一一对应的关系。从Android API文档中View类的介绍中,可查看所有的属性与方法之间的对应关系,在此只列出一些常用的属性供参考,如表31所示。 表31View类的常见XML属性、对应方法及说明 XML属性对 应 方 法说明 android: alphasetAlpha(float)设置组件的透明度 android: backgroundsetBackgroundResource(int)设置组件的背景 android: clickablesetClickable(boolean)设置组件是否可以触发单击事件 android: focusablesetFocusable(boolean)设置组件是否可以得到焦点 android: idsetId(int)设置组件的唯一ID android: minHeightsetMinimumHeight(int)设置组件的最小高度 android: minWidthsetMinimumWidth(int)设置组件的最小宽度 android: paddingsetPadding(int,int,int,int)在组件四边设置边距 android: scaleXsetScaleX(float)设置组件在X轴方向的缩放 android: visibilitysetVisibility(int)设置组件是否可见 几乎每个界面组件都需要设置android: layout_height、android: layout_width这两个属性,用于指定该组件的高度和宽度,主要有以下三种取值。 (1) fill_parent: 表示组件的高或宽与其父容器的高或宽相同。 (2) wrap_content: 表示组件的高或宽恰好能包裹内容,随着内容的变化而变化。 (3) match_parent: 该属性值与fill_parent完全相同,Android 2.2之后推荐使用match_parent代替fill_parent。 虽然两种方式都可以控制界面的显示,但是它们又各有优缺点。 (1) 完全使用Java代码来控制用户界面不仅烦琐,而且界面和代码相混合,不利于解耦、分工。 (2) 完全使用XML布局文件虽然方便、便捷,但灵活性不好,不能动态改变属性值。 因此,我们经常会混合使用这两种方式来控制界面,一般来说,习惯将一些变化小的、比较固定的、初始化的属性放在XML文件中管理,而对于那些需要动态变化的属性则交给Java代码控制。例如,可以在XML布局文件中设置文本显示框的高度和宽度以及初始时的显示文字,在代码中根据实际需要动态地改变显示的文字。 视频详解 3.1.1文本显示框TextView TextView类直接继承于View类,主要用于在界面上显示文本信息,类似于一个文本显示器,从这个方面来理解,有点儿类似于Java编程中的JLable的用法,但是比JLable的功能更加强大,使用更加方便。TextView可以设置显示文本的字体大小、颜色、风格等属性,TextView的常见属性如表32所示。 表32TextView类的常见XML属性、对应方法及说明 XML属性对应方法说明 android: gravitysetGravity(int)设置文本的对齐方式 android: heightsetHeight(int)设置文本框的高度(以pixel为单位) android: textsetText(CharSequence)设置文本的内容 android: textColorsetTextColor(int)设置文本的颜色 android: textSizesetTextSize(int,float)设置文本的大小 android: textStylesetTypeface(Typeface)设置文本的风格 android: typefacesetTypeface(Typeface)设置文本的字体 android: widthsetWidth(int)设置文本框的宽度(以pixel为单位) Android: drawableLeftsetCompoundDrawablesWith IntrinsicBounds(int,int,int,int)要绘制在文本左侧的可绘制对象 这些是文本显示控件都具有的功能。除此之外,Android中的TextView还具有自动识别文本中的各种链接、能够显示字符串中的HTML标签的格式。识别自动链接的属性为android: autoLink,该属性的值有以下几种。 (1) none: 不匹配任何格式,这是默认值。 (2) web: 只匹配网页,如果文本中有网页,网页会以超链接的形式显示。 (3) email: 只匹配电子邮箱,电子邮箱会以超链接的形式显示。 (4) phone: 只匹配电话号码,电话号码会以超链接的形式显示。 (5) map: 只匹配地图地址。 (6) all: 匹配以上所有。 当匹配时,相应部分会以超链接显示,单击超链接,会自动运行相关程序。例如,单击电话号码超链接会调用拨号程序,单击网页超链接会打开网页等。 而显示HTML标签格式,则需要通过Java代码来控制。首先为该文本框添加一个id属性,然后在onCreate()方法中,通过findViewById(R.id.***)获取该文本框,最后通过setText()方法来设置显示的内容。 【例31】使用TextView显示“欢迎使用《Android零基础入门到实战》”文本,其中,“《Android项目开发实战教程》”为蓝色字体。 注意: 本书代码中,右箭头所指内容为编者对读者的提示,实际编译时无须添加。 程序清单31: chart0301\app\src\main\res\layout\activity_main.xml 1 程序清单32: chart0301\app\src\main\java\com\jxcia\chart0301\MainActivity.java 1TextView tv = (TextView) findViewById(R.id.myText); //myText为id 2tv.setText(Html.fromHtml("欢迎使用《Android项目开发实战教程》")); 该代码的显示效果是: 《Android零基础入门到实战》这几个字为蓝色,其他字的颜色为布局文件中设置的颜色,如图34所示。 图34TextView实现效果 视频详解 3.1.2文本编辑框EditText TextView的功能仅是用于显示信息而不能编辑,好的应用程序往往需要与用户进行交互,让用户进行输入信息。为此,Android中提供了EditText组件,EditText是TextView类的子类,与TextView具有很多相似之处。它们最大的区别在于,EditText允许用户编辑文本内容。使用EditText时,经常使用到的属性有以下几个。 (1) android: hint: 设置当文本框内容为空时,文本框内显示的提示信息,一旦输入内容,该提示信息立即消失,当删除所有输入的内容时,提示信息又会出现。 (2) android: password: 设置文本框是否为密码框,值为true或者false,设置为true时,输入的内容将会以点替代,但已不推荐使用了。 (3) android: inputType: 设置文本框接收值的类型,例如,只能是数字、电话号码等。 【例32】以“欢乐购商城”登录页面输入手机号编辑框为例,介绍文本编辑框使用方法,界面程序代码如下。 程序清单33: char0302\app\src\main\res\layout\activity_main.xml 1→字体大小设置为14sp 程序运行效果如图35所示。 图35EditText运行效果 视频详解 3.1.3按钮Button Button也是继承于TextView,功能非常单一,就是在界面中生成一个按钮,供用户单击。单击按钮后,会触发一个单击事件,开发人员针对该单击事件可以设计相应的事件处理; 从而实现与用户交互的功能。用户可以设置按钮的大小、显示文字以及背景等。当我们想把一张图片作为按钮时,有两种方法: 一种是将该图片作为Button的背景图片; 另一种是使用ImageButton按钮,将该图片作为ImageButton的android: src属性值即可。需注意的是,ImageButton按钮不能指定android: text属性,即使指定了,也不会显示任何文字。 【例33】以“欢乐购商城”登录页面“登录”按钮为例,介绍按钮使用方法,界面布局代码如下。 程序清单34: char0303\app\src\main\res\layout\activity_main.xml 1