学习目标 本章主要介绍AndroidUI系统控件中文本控件 TextView、EditText,按钮控件Buton、图片按钮控件 ImageButon、单选按钮RadioButon、复选按钮CheckBox、 时间选择器TimePicker、日期选择器DatePicker、图片控件 ImageView、模拟时钟AnalogClock和数字时钟DiditalClock。 读者通过本章的学习,能够深入了解AndroidUI系统控件, 掌握以下知识要点。 (1)掌握文本控件TextView、EditText的类继承结 构、属性及方法、应用。 (2)掌握按钮控件Buton、图片按钮控件ImageButon 的通常用法及属性。 (3)掌握单选按钮RadioButon、复选按钮CheckBox 的常用方法、引用处理及属性方法设置。 (4)掌握时间选择器TimePicker、日期选择器 DatePicker的使用方法及常用属性设置。 (5)掌握图片控件ImageView的常用方法、引用处理 及属性方法设置。 (6)熟悉模拟时钟AnalogClock和数字时钟DiditalClock 的常用方法。 Android系统提供了许多控件给开发者使用,开发者 通过对这些控件编码及控件组合实现系统设计和功能开 发。Android系统的界面控件分为定制控件和系统控件, 系统控件是Android系统提供给用户已经封装的界面控 件,是在应用程序开发过程中的常见功能控件。系统控件 更有利于帮助用户进行快速开发,同时能够使开发者在使 用Android系统进行开发的过程中,保持应用程序的界面 一致性。 第 5 章 系统控件基础 Android应用开发案例教程(第2版) 13 0 在开发应用中,经常使用的系统控件有TextView、EditText、Button、ImageButton、 Checkbox、RadioButton、Spinner、ListView和TabHost等。 AndroidUI系统控件的使用,除了传统的程序代码中直接声明、创建之外,最能体现 其设计思想的是,采用XML文件来描述控件,在XML中可以描述控件的宽度、长度、控件 上的文本、控件的背景、控件的填充、设置源等。 5.1 文本控件简介 在Android系统中,文本控件包含TextView 和EditText控件,它们都继承自android. view.View,在android.widget包中。下面就文本控件的属性及使用方法进行详述。 5.1.1 文本框TextView android.widget包中的TextView是文本表示控件,一般用来文本展示,是一种用于显 示字符串的控件。主要功能是向用户展示文本的内容,可以作为应用程序的标签或者邮件 正文的显示,默认情况下不允许用户直接编辑。 在程序设计和开发中,使用TextView可以采用的方式有两种,如下所示。 (1)在程序中创建控件的对象来使用TextView控件。 如TextView控件,可以通过编写如下代码完成控件使用。 TextView tv=new TextView(this); tv.setText("大家好"); setContentView(tv); (2)使用XML描述控件,并在程序中引用和使用。 ① 在res/layout文件下的XML文件中描述控件。 <TextView Android:id="@+id/text_view" Android:layout_width="fill_parent" Android:layout_height="wrap_content" Android:textSize="16sp" Android:padding="10dip" Android:background="#00f0d0" Android:text="大家好,这里是TextView"/> ② 在程序中引用XML描述的TextView。 TextView text_view = (TextView) findViewById(R.id.text_view); 上述两种方式的使用,各有优缺点,根据不同的需要,采用相应的方法。相比而言,采 用第二种方法更好,其主要优势有:一是方便代码的维护;二是编码灵活;三是利于分工 协作。 TextView控件常用方法有getText()和setText()。TextView 控件有着与之相应的 属性,通过选择不同的属性,给予其值,能够实现不同的效果。TextView 控件属性的设置 第 5 章AndroidUI系统控件基础 既可以在XML文件中通过属性名称设定赋值,也可以采用对应的方法,在程序代码中设 定。其常用属性及对应方法如表5-1所示。 表5- 1 TextView 控件常用XML属性及对应方法 属性名称对应方法说明 android:text setText(CharSequence) 设置TextView控件文字显示 android:autoLink setAutoLinkMask(int) 设置是否当文本为URL链接/Email/电话 号码/Map时,文本显示为可点击的链接。 可选值:none/web/email/phone/map/al android:hint setHint(int) 当TextView中显示的内容为空时,显示该 文本 android:textColor setTextColor(ColorStateList) 设置字体颜色 android:textSize setTextSize(float) 设置字体大小 android:typeface setTypeface(Typeface) 设置文本字体,必须是以下常量值之一: normal0,sans1,serif2,monospace(等宽 字体)3 android:elipsize setElipsize(TextUtils.TruncateAt) 如果设置了该属性,当TextView中要显示 的内容超过了TextView的长度时,会对内 容进行省略。可取的值有start、middle、 end和marque android:gravity setGravity(int) 定义TextView在 x 轴和 y 轴方向上的显 示方式 android:height setHeight(int) 设置文本区域的高度,支持度量单位:px (像素)/dp/sp/in/mm(毫米) android:minHeight setMinHeight(int) 设置文本区域的最小高度 android:maxHeight setMaxHeight(int) 设置文本区域的最大高度 android:width setWidth(int) 设置文本区域的宽度,支持度量单位:px (像素)/dp/sp/in/mm(毫米) android:minWidth setMinWidth(int) 设置文本区域的最小宽度 android:maxWidth setMaxWidth(int) 设置文本区域的最大宽度 5.1.2 TextView 应用案例 本节在上述TextView控件讲解的基础上,通过案例熟悉TextView控件的属性和用 法,具体步骤如下。 (1)创建一个新的Android工程,工程名为TextViewDemo,目标API选择28,应用程 序名为TextViewDemo,包名为com.hisoft.activity,创建的Activity 的名字为 TextViewActivity,最小SDK版本根据选择的目标API会自动添加为17,创建后的项目工 程如图5-1所示。 es→lyuctvitman. (2)打开项目工程中raot目录下的aiy_ixml文件,设置线性布局,添 加4个TextView控件,并设置属性,代码如下: Android应用开发案例教程(第2版) 13 2 图5-1 TextViewDemo 工程目录结构 1. <? xml version="1.0" encoding="utf-8"? > 2. <? xml version="1.0" encoding="utf-8"? > 3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 4. android:orientation="vertical" 5. android:layout_width="fill_parent" 6. android:layout_height="fill_parent" 7. > 8. <TextView 9. android:layout_width="fill_parent" 10. android:layout_height="wrap_content" 11. android:text="字体大小为14 的文本" 12. android:textSize="14pt" 13. /> 14. <TextView 15. android:layout_width="fill_parent" 16. android:layout_height="wrap_content" 17. android:singleLine="true" 18. android:text="TextView 示例" 19. android:ellipsize="middle" 20. /> 21. <TextView 22. android:layout_width="fill_parent" 23. android:layout_height="wrap_content" 第 5 章 AndroidUI系统控件基础 13 3 24. android:singleLine="true" 25. android:text="访问:http://www.zxxxx.cn" 26. android:autoLink="web" 27. /> 28. <TextView 29. android:layout_width="fill_parent" 30. android:layout_height="wrap_content" 31. android:text="红色并带阴影的文本" 32. android:shadowColor="#0000ff" 33. android:shadowDx="15.0" 34. android:shadowDy="20.0" 35. android:shadowRadius="45.0" 36. android:textColor="#ff0000" 37. android:textSize="20pt" 38. /> 39. </LinearLayout> (3)src目录下com.hisoft.activity包下的TextViewActivity.java文件和res→values 目录下strings.xml文件,都暂不做修改。部署运行项目工程,项目运行结果如图5-2所示。 图5-2 TextViewDemo 运行结果 5.1.3 编辑框EditText EditText控件继承自android.widget.TextView,在android.widget包中。EditText 为输入框,是编辑文本控件,主要功能是让用户输入文本的内容。它是可以编辑的,是用来 输入和编辑字符串的控件。 利用控件EditText不仅可以实现输入信息,还可以根据需要对输入信息进行限制约 束。如:限制控件EditText输入信息。 <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" Android应用开发案例教程(第2版) 13 4 android:inputType="numeber"/> 与上节所讲述的TextView一样,EditText控件的使用也有两种:一种是在程序中创 建控件的对象来使用EditText控件;另外一种是在res/layout文件下的XML文件中描述 控件,程序中使用EditText控件。例如: (1)用XML描述一个EditView。 <EditText Android:id="@+id/edit_text" Android:layout_width="fill_parent" Android:layout_height="wrap_content" Android:text="这里可以输入文字" /> (2)在程序中引用XML描述的EditText。 EditText editText = (EditText) findViewById(R.id.editText); EditText常用方法:getText(),它也有与之相应的属性,通过选择不同的属性,给予 其值,能够实现不同的效果。其常用属性及对应方法如表5-2所示。 表5-2 EditText控件常用XML属性及对应方法 属性名称对应方法说 明 android:hint 输入框的提示文字 android:password setTransformationMethod (TransformationMethod) 设置文本框中的内容是否显示为密 码,当为true时,以小点“.”显示文本 android:phoneNumber setKeyListener(KeyListner) 设置文本框中的内容只能是电话号 码,当为true时,表示电话框 android:digits setKeyListener(KeyListener),可 使用此方法监听键盘来实现 设置允许输入哪些字符。如: 1234567890.+-*/%\n() android:numeric setKeyListener(KeyListener),可 使用此方法监听键盘来实现 设置只能输入数字,并且置顶可输入 的数字格式,可选值有:Integer(正整 数)、signed(整数,可带负号)、decimal (浮点数) android:singleLine setTransformationMethod (TransformationMethod) 设置文本框的单行模式 android:maxLenght setFilters(InputFilter) 设置最大显示长度 android:cursorVisible setCursorVisible(boolean) 设置光标是否可见,默认为可见 android:lines setLines(int) 通过设置固定的行数来决定EditText 的高度 android:maxLines setMaxLines(int) 设置最大的行数 android:minLines setMinLines(int) 设置最小的行数 android:scrollHorizontally setHorizontallyScrolling(boolean) 设置文本框是否可以进行水平滚动 android:selectAllOnFocus setSelectAllOnFocus(boolean) 如果文本内容可选中,当文本框获得 焦点时自动选中全部文本内容 续表 第 5 章 AndroidUI系统控件基础 13 5 属性名称对应方法说 明 android:shadowColor setShadowLayer(float,float, float,int) 为文本框设置指定颜色的阴影,需要 与shadowRadius一起使用 android:shadowDx setShadowLayer(float,float, float,int) 设置阴影横向坐标开始位置,为浮 点数 android:shadowDy setShadowLayer(float,float, float,int) 设置阴影纵向坐标开始位置,为浮 点数 android:shadowRadius setShadowLayer(float,float, float,int) 为文本框设置阴影的半径,为浮点数 5.1.4 EditText应用案例 在上述EditText控件讲解的基础上,通过案例熟悉EditText控件的属性和用法,具体 步骤如下。 (1)创建一个新的Android工程,工程名为EditTextDemo,目标API选择28,应用程 序名为EditTextDemo,包名为com.hisoft.activity,创建的Activity 的名字为 EditTextActivity,最小SDK版本根据选择的目标API会自动添加为17,创建后的项目工 程如图5-3所示。 图5-3 EditTextDemo 工程目录结构 (2)打开项目工程中res→layout目录下activity_main.xml文件,设置线性布局,添加 1个TextView控件和1个EditText控件,并设置相关属性,代码如下: 1. <? xml version="1.0" encoding="utf-8"? > 2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3. android:orientation="vertical" 4. android:layout_width="fill_parent" Android应用开发案例教程(第2版) 13 6 5. android:layout_height="fill_parent" 6. > 7. <TextView android:text="请输入:" 8. android:id="@+id/textView1" 9. android:layout_width="wrap_content" 10. android:layout_height="wrap_content"> 11. </TextView> 12. <EditText android:layout_height="wrap_content" 13. android:layout_width="match_parent" 14. android:id="@+id/editText1" 15. android:hint="这里键入输入内容"> 16. <requestFocus></requestFocus> 17. </EditText> (3)src目录下com.hisoft.activity包下的EditTextActivity.java文件和res→values 目录下strings.xml文件,都暂不做修改。部署运行项目工程,项目运行结果如图5-4所示。 图5-4 EditTextDemo 运行结果 5.2 按钮控件简介 5.2.1 按钮Button Button是一种常用的按钮控件,继承自android.widget.TextView,在android.widget 包中。如图5-5所示,用户能够在该控件上点击,然后引发相应的事件处理函数。 图5-5 Button 类继承图 它的常用子类有CheckBox、RadioButton、ToggleButton 等,在后续章节会讲到。 Button按钮控件的通常用法如下。 在程序中通过super.findViewById(id)得到在layout中XML 文件中声明的Button 的引用,然后使用setOnClickListener (View.OnClickListener)添加监听,再在View.OnClickListener监听器中使用v.equals (View)方法判断是哪一个按钮被按下,调用不同方法进行分别处理。具体如下。 (1)用XML描述一个Button。 <Button Android:id="@+id/button" 第 5 章 AndroidUI系统控件基础 13 7 Android:layout_width="wrap_content" Android:layout_height="wrap_content" Android:text="这是一个button" /> (2)在程序代码中引用用XML描述的Button。 Button button = (Button) findViewById(R.id.button); (3)给Button设置事件响应。 button.setOnClickListener(button_listener); (4)生成一个按钮事件监听器。 private Button.OnClickListener button_listener = new Button.OnClickListener() { public void onClick(View v) { switch(v.getId()){ case R.id.Button: textView.setText("Button 按钮1"); return; case R.id.Button01: textView.setText("Button 按钮2"); return; } } }; 此外,也可以采用在layout中XML 文件中声明分配一个方法给Button,使用 android:onClick属性,如: 1. <Button 2. android:layout_height="wrap_content" 3. android:layout_width="wrap_content" 4. android:text="@string/self_destruct" 5. android:onClick="selfDestruct" /> 当用户单击Button 按钮时,Android 系统会自动调用Activity 中的selfDestruct (View)方法,但selfDestruct(View)方法必须声明为public,并只能接受View 作为其唯一 的参数。传递给这个方法的View是被点击的控件的一个引用,如下: 1. public void selfDestruct(View view) { 2. //Kabloey 3. } 5.2.2 Button应用案例 在开发应用中,Button的使用较为常见,下面通过一个点击Button修改标题的案例来 Android应用开发案例教程(第2版) 13 8 介绍Button的应用。具体步骤如下。 (1)创建一个新的Android工程,工程名为ButtonDemo,目标API选择28,应用程 序名为ButtonDemo,包名为com.hisoft.activity,创建的Activity 的名字为 ButtonActivity,最小SDK 版本根据选择的目标API会自动添加为17,创建后的项目 工程如图5-6所示。 图5-6 ButtonDemo 工程目录结构 (2)打开项目工程中res→layout目录下activity_main.xml文件,设置线性布局,添加 1个Button控件,并设置相关属性,代码如下所示: 1. <? xml version="1.0" encoding="utf-8"? > 2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3. android:orientation="vertical" 4. android:layout_width="fill_parent" 5. android:layout_height="fill_parent" 6. > 7. <Button android:text="按钮1" 8. android:id="@+id/button1" 9. android:layout_width="wrap_content" 10. android:layout_height="wrap_content"> 11. </Button> 12. </LinearLayout> (3)打开src 目录下com.hisoft.activity 包下的ButtonActivity.java 文件,声明 Button,并获取引用,然后添加监听器,代码如下: