版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章UI编程基础Android应用程序开发技术UI(UserInterface)是用户界面的简称,用户界面的主要作用提供人机交互。用户对应用程序的第一印象都是从用户界面开始的,一个好的UI应当注重用户体验,具备界面美观、操作简单方便、符合操作习惯等特点。UI设计是指从软件人机交互、操作逻辑、界面美观等方面进行的整体设计。一个Android应用是由一个或多个Activity组成的,每个Activity都对应一个布局文件Layout,每个Layout就是UI的容器,可以根据应用程序的需要,采用类似搭积木的方式放置各种功能不同的UI组件,通过这些组件的使用,应用程序可以获取用户数据并按照用户意愿进行响应。Android系统为开发人员提供了大量功能丰富的UI组件,通过使用这些组件可以创建友好的应用程序界面。本章介绍通过一个简单的计算器实例介绍Android应用程序的UI的基本组成、布局、基本组件,并介绍Android系统的时间处理机制。项目导学内容安排4.1AndroidUI概述4.2常用控件4.3布局管理器4.4UI布局4.5事件处理4.6对话框内容安排4.1AndroidUI概述4.2常用控件4.3布局管理器4.4UI布局4.5事件处理4.6对话框Android系统呈现出来的用户界面,是由多种UI元素组成的,为用户提供信息查看和进行交互的功能。UI主要包括:View(视图):
是所有在UI上可视界面元素(通常被称为控件)的基类。所有UI控件都是由View派生出来的,View对象都占据屏幕上的一个矩形空间。ViewGroup(视图容器):是由View派生的一种特殊的视图组,它是可以包含View及其派生类的容器。4.1AndroidUI概述View和ViewGroup的关系图4.1AndroidUI概述3.Layout(布局):描述了APP的外观。Layout中定义了用于交互的各个控件的外观,如大小、位置等,以及各控件之间的相互位置及对齐关系等,通常由一个XML文件描述。4.Activity(活动):
是APP的控制器,定义了APP的行为。每一个Activity对应了一个Layout,用户可以通过在Layout的某个动作,让Activity运行响应的代码来完成某个确定的动作。每一个Active都有一个与其对应XML布局文件。5.Fragment(片段):
可以被不同Activity重复使用的模块化的代码组件,可以根据Android设备屏幕的不同尺寸,优化UI布局和创建可重用的UI元素。4.1AndroidUI概述UI中用于描述宽高尺寸的单位1.px(像素):是屏幕中可以显示的最小元素单元。分辨率越高的手机屏幕的像素点越多。因此如果使用px为单位设置控件的大小,需要注意的是采用px设置大小在分辨率不同的手机上显示的控件大小不同。2.dp:是与密度无关的像素,又称dip。使用dp的好处是在不同分辨率的屏幕总能显示相同的大小控件,因此,一般使用dp作为控件与布局的宽高单位。3.pt:pt为point的缩写,但中文不叫“点”,是一个专用的印刷单位“磅”,大小为1/72英寸,称为“绝对长度”。pt和px类似,在不同分辨率的手机上用相同pt作为字体单位,显示的字体大小不同。4.sp:可伸缩像素,设置字体大小时使用,采用相同sp单位的字体,在不同分辨率的手机上显示的字体大小不同。内容安排4.1AndroidUI概述4.2常用控件4.3布局管理器4.4UI布局4.5事件处理4.6对话框4.2.1通用属性类别属性设置结果IDID控件唯一标识宽和高layout_width控件宽度layout_height控件高度显示位置gravity控件本身内容显示对齐方式layout_gravity控件在父控件中显示的位置背景颜色background控件背景颜色文本属性text文本内容textcolor文本颜色textsize文本大小textstyle文本样式Android中几乎所有的控件都是View的子类,因此他们都具有共同的属性控件的常用属性4.2.1通用属性控件位置layout_gravity属性设置该控件在父容器的相对位置属性值含义top,bottom位于其容器的顶部,底部left,right位于其容器的左侧,右侧center_vertical垂直方向居中fill_vertical垂直方向填充center_horizontal水平方向居中fill_horizontal水平方向填充center居中fill填满其容器clip_vertical垂直方向裁剪clip_horizontal水平方向裁剪start位于其容器的开始处end位于其容器的结束处layout_gravity可以选取的值及其含义TextView控件设置属性android:layout_gravity=center_horizontal将TextView控件在布局中居中显示4.2.1通用属性文本属性---TextstyleTextView控件属性设置为android:gravity=center_horizontal,控件所包含的文本显示在控件正中位置名称含义normal正常bold加粗italic斜体gravity属性gravity属性用来设置控件本身的内容文本显示位置的对齐方式,默认设置是左上脚对齐,可选值为top,bottom,left,right,center等,也可以通过“|”来指定多个值。如果该属性指定为center,相当于center_vertical|center_horizontal,即水平和垂直都居中对齐。4.2.2文本框TextViewTextView是文本框控件,用来显示简单的文本提示信息java.lang.Object
↳android.view.View
↳android.widget.TextViewTextView的继承关系4.2.2文本框TextView1.TextView支持的XML属性及相关方法文本框控件常用XML属性及相关方法。文本框控件通常只用来显示文本提示信息,可以通过调用下表的方法编程设置其显示的文本内容和形式,一般不需要设置事件侦听。XML属性相关方法说明android:ID
文本标签标识android:layout_widthsetWidth()文本标签的宽度android:layout_heightsetHeight()文本标签的高度android:textsetText()设置文本标签的内容android:textSizesetTextSize()设置文本标签文本的字号大小android:textColor
setTextColor()设置文本标签的文本颜色android:textStylesetTypeface(Typeface)设计文本框你的字体风格,如加黑、斜体等android:gravitysetGravity(int)设置文本框内文本的对齐方式
getText()获取文本标签的文本内容4.2.2文本框TextView2.【例4-1】文本框控件应用实例建一个工程名为samp4_1的项目,包名为xsyu.jsj.samp4_1的空白工程,所需的设计文件如下。序号文件名文件类型1MainActivity.java活动文档2activity_main.xml布局文件3strings.xml字符串资源文档4.2.2文本框TextView1)建立字符串资源文件打开工程导航框res->values下的strings.xml,添加Line1-Li-ne4四个字符串资源4.2.2文本框TextView2)设计布局文件在布局设计时可以采用两种方式,一种是在“Design”窗口下采用拖拉控件和在属性栏对控件的各种属性进行设置的方式,另一种是直接在“Code”代码编辑窗口对布局文件进行文本编辑的方式。为了提高布局设计的效率,设计时建议先在“Design”窗口下拖拉控件,然后在“Code”窗口下直接进行代码编辑设置控件的属性。4.2.2文本框TextView2)设计布局文件在“Design”窗口加入控件。打开布局文件activity_main.xml中,在设计窗口下,删除原有的控件,然后从控件箱中的“Layouts“布局类别中拖入一个“LinearLayout(vertical)”垂直线性布局后,再从“Text”文本类中依次增加四个TextView文本框控件。此时,系统会根据用户的动作自动更新activity_main.xml文件4.2.2文本框TextView2)设计布局文件在“Code”窗口编辑activity_main.xml代码,主要修改水平布局中四个textView的ID和text属性,修改后的代码片段如下<LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical">
<TextViewandroid:id="@+id/tV_line1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/Line1"android:textSize="16dp"/>
<TextViewandroid:id="@+id/tV_line2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/Line2"android:gravity="center"/>
<TextViewandroid:id="@+id/tV_line3"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#FF0000"android:text="@string/Line3"/>
<TextViewandroid:id="@+id/tV_line4"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/Line4"android:textStyle="italic"/>
</LinearLayout>4.2.2文本框TextView显示效果4.2.2文本框TextView3)修改ManiActivity.java文件我们希望能够动态生成一个textView文本框,并显示与tV_line1控件相同的内容。步骤如下:为垂直布局指定一个ID。由于增加文本框需要放置在一个父窗口中,需要获得父窗口对象的引用,因此在activity_main.xml需要增加如下代码:<LinearLayoutandroid:id="@+id/LLayout_1"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical">更新的onCreate()函数,完整代码如下。publicclassMainActivityextendsAppCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
//获取线性布局的IDLinearLayoutlinear=(LinearLayout)findViewById(R.id.LLayout_1);//定义新的TextView控件tvnewTextViewtvnew=newTextView(this);//设置tvnew的ID,可有可无tvnew.setId(1);//将tvnew加入到现行布局中linear.addView(tvnew);//设置tvnew的文本和位置TextViewtv1=(TextView)findViewById(R.id.tV_line1);Stringmsg=(String)tv1.getText();tvnew.setGravity(Gravity.CENTER);tvnew.setText(msg);}}4.2.2文本框TextView最终完整的工程运行结果如图所示,图中增加了一个文本框,并显示居中显示了第一个控件的内容。4.2.3编辑框EditTextEditText组件是UI界面中让用户输入信息的控件java.lang.Object
↳android.view.View
↳android.widget.TextView↳android.widget.EditTextEditText的继承关系TextView是EditText的父类,实际上EditText类相比T-extView类最大的不同就是具有文本编辑功能,可以接受用户输入。4.2.3编辑框EditText1.EditView支持的XML属性及相关方法EditText除了具有TextView的属性外,其常用的属性有两个,分别是inputType和hint,如表4-6所示。hint属性用于在输入为空的情况下显示输入提示文字,提示文字会以浅灰色显示,当用户在编辑框中输入任何字符后,提示信息会消失。XML属性相关方法说明android:hintsetHint(int)设置当EditText控件内容为空时,默认显示的提示文本android:inputTypesetRawInputTYpe(input)指定该文本框输入类型4.2.3编辑框EditTextEditText最常用属性是inputType,该属性用于设置EditText控件的输入类型。该属性对应类型如下。例如,在用户登录界面设计时,可以设置inputType类型为textPassword,用户可以输入文本类型的密码,此时密码隐藏起来只显示“*”。属性值含义属性值含义none普通输入textVisiblePassword密码可见text文本number数字键盘textCapCharacters大写键盘numberSigned有符号数字键盘textCapWords单词首字母大写numberDecimal带小数点的数字键盘textCapSentences仅第一个字母大写numberPassword数字密码键盘textMultiLine多行输入Phone拨号键盘textShortMessage短消息格式Datetime日期时间键盘textLongMessage长消息格式Date日期键盘textPassword文字密码键盘time时间键盘EditText控件inputType属性的常用取值和含义4.2.3编辑框EditText2.
【例4-2】文本框应用实例设计一个用户信息录入界面,提示用户输入姓名、电话、邮箱和密码。创建一个工程名为samp4_2的项目,包名为xsyu.jsj.samp4_2的空白工程,所需的设计文件如下。序号文件名文件类型1MainActivity.java活动文档2activity_main.xml布局文件3strings.xml字符串资源文档4.2.3编辑框EditText1)建立字符串资源文件<resources><stringname="app_name">project4_2</string><stringname="name">姓名</string><stringname="phone">电话</string><stringname="email">电子邮箱</string><stringname="namehint">请输入姓名</string><stringname="phonehint">请输入电话</string><stringname="emailhint">请输入Email</string><stringname="passord">密码</string><stringname="pwdhint">请输入密码</string></resources>4.2.3编辑框EditText2)设计布局文件在布局文件中加入四个TextView和4个EditText控件,各控件长宽属性都设置为:android:layout_width=“wrap_content”,android:layout_height=“wrap_content”,其他属性设置如表下。控件类型控件ID其它属性设置功能说明TextViewtextView1android:text="@string/name"/>显示“姓名”TextViewtextView2android:text="@string/phone"/>显示“电话”TextViewtextView3android:text="@string/email"/>显示“电子邮件”TextViewtextView4android:text="@string/passord"/>显示“密码“EditTexteT_Nameandroid:hint="@string/namehint"android:inputType="textPersonName"姓名编辑框(可以输入文本)EditTexteT_Phoneandroid:hint="@string/phonehint"android:inputType="phone"电话编辑框(只能输入数字)EditTexteT_emailAddressandroid:hint="@string/emailhint"android:inputType="textEmailAddress"邮件编辑框(输入必须符合邮件格式)EditTexteT_Passwordandroid:hint="@string/pwdhint"android:inputType="textPassword"密码编辑框(输入字符用*)4.2.3编辑框EditText显示效果当用户输入各条信息时,hint提示信息就会消失,同时android就会根据inputType的类型显示相应的键盘,例如输入姓名时,根据其android:inputType="textPersonName"就显示出标准键盘;输入电话号码时由于android:inputType="phone"就只是显示数字键盘,输入密码时根据android:inputType="textPassword"就会将密码用“*”字符隐藏起来。4.2.3编辑框EditText显示效果当用户输入各条信息时,hint提示信息就会消失,同时android就会根据inputType的类型显示相应的键盘,例如输入姓名时,根据其android:inputType="textPersonName"就显示出标准键盘;输入电话号码时由于android:inputType="phone"就只是显示数字键盘,输入密码时根据android:inputType="textPassword"就会将密码用“*”字符隐藏起来。由于各行的EditText控件没有对齐,界面并不美观。4.2.3编辑框EditText3)使用layout_weight
属性对齐控件layout_weight
的功能是设置“剩余空间的分配加权值”,会按权值比例分配布局剩余的空间,所谓的剩余空间是指:剩余空间=父控件全部空间-所有未设weight控件所占的空间设置【例4-2】所有控件属性:android:layout_width="0"android:layout_height="wrap_content"android:layout_weight="1"设置后android系统会将每一个行的TextView和EditText等宽。通过设置layout_weigh属性,可调整EditText的占据空间。设置所有EditText的layout_weight为:android:layout_weight="2.5"4.2.3编辑框EditTextandroid布局中首先确保每个视图有足够的空间容纳其内容,然后布局会为layout_weight大于等于1的所有视图按照比例分配其父视图的额外空间。分配的原则是:将所有视图的layout_weight属性值求和,在【例4-2】中每个水平线性布局中两个控件的layout_weight分别是1和2.5,因此总和是3.5,各个视图占据父视图的空余空间将是这个视图的权重除以总权重的比例。因此每行的TextView控件和EditText分别占1/3.5和2/3.5使用layout_weight属性对齐控件后的运行结果4.2.3编辑框EditTextandroid布局中首先确保每个视图有足够的空间容纳其内容,然后布局会为layout_weight大于等于1的所有视图按照比例分配其父视图的额外空间。分配的原则是:将所有视图的layout_weight属性值求和,在【例4-2】中每个水平线性布局中两个控件的layout_weight分别是1和2.5,因此总和是3.5,各个视图占据父视图的空余空间将是这个视图的权重除以总权重的比例。因此每行的TextView控件和EditText分别占1/3.5和2/3.5使用layout_weight属性对齐控件后的运行结果文本框和编辑框距离左右边框太窄,希望将控件到边框的距离增大4.2.3编辑框EditTextAndroid提供了两个属性:padding与layout_mar-gin。这两个属性的含义如下控件的边界属性padding与layout_margin的区别4.2.3编辑框EditTextpadding为内边框,指该控件内部显示内容(如文本和图片等)距离该控件的边框的距离padding的属性值含义padding位置示意图top在视图顶部添加额外空白bottom在视图底部添加额外空白left,start在视图左侧(或开始处)添加额外空白4.2.3编辑框EditTextpadding为内边框,指该控件内部显示内容(如文本和图片等)距离该控件的边框的距离padding的属性值含义padding位置示意图right,end在视图右侧(或结束处)添加额外空白all为视图的每一侧添加相等的空间layout_margin为外边框,指该控件与其他控件之间的边距。layout_margin属性值和padding的属性值含义是一样的4.2.3编辑框EditText显示效果将左边所有TextView类型控件的layout_marginLeft设置为:
android:layout_marginLeft="20dp"将右边所有EditText的右边距设置为:
android:layout_marginRight="20dp"4.2.4按钮ButtonButton在UI设计中是使用非常频繁的一个控件,当用户单击Button后会触发一个onClick事件,这个事件会调用特定的代码实现指定的功能。java.lang.Object
↳android.view.View
↳android.widget.TextView↳android.widget.ButtonButton的继承关系4.2.4按钮ButtonButton支持的XML属性及相关方法XML属性相关方法
说明android:clickablesetClickable(booleanclickable)设置是否允许点击。clickable=true:允许点击clickable=false:禁止点击android:backgroundsetBackgroundResource(intresid)通过资源文件设置背景色。resid:资源xml文件ID按钮默认背景为android.R.drawable.btn_defaultandroid:textsetText(CharSequencetext)设置文字android:textColorsetTextColor(intcolor)设置文字颜色android:onClicksetOnClickListener(OnClickListenerI)设置点击事件Button控件的onClick点击事件常用的实现方法有两种:
(1)为Button控件设定OnClickListener()侦听器;
(2)设置控件的onClick属性4.2.4按钮Button命令按钮在控件箱的Buttons子类中,在该子类中找到Button控件将其拖拽到下方的组件树中,在布局预览界面就可以看到Button按钮。4.2.4按钮Button2.
【例4-3】Button按钮的使用方法设计一个电话拨号界面,提示用户输入电话号码。当用户点击“拨打电话”按钮后,调用系统的拨打电话的应用。4.2.4按钮Button2.
【例4-3】Button按钮的使用方法创建一个工程名为Project4_3的项目,包名为xsyu.jsj.Project4_3的空白工程,所需的设计文件如下序号文件名文件类型1MainActivity.java活动文档2activity_main.xml布局文件4.2.4按钮Button1)布局文件activity_main.xml<LinearLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"tools:context="${relativePackage}.${activityClass}">
<EditTextandroid:id="@+id/et_tel"android:layout_width="fill_parent"android:layout_height="wrap_content"android:inputType="phone"android:hint="请输入待拨打的电话号码"/><Buttonandroid:id="@+id/bnt_mybut"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="拨打电话"/></LinearLayout>在水平布局中有一个EditText控件和Button控件,EditText用于输入电话号码,Button控件在点击后会自动调用拨号界面4.2.4按钮Button2)活动文档ManiActivity.javapackageject4_3;
importandroidx.appcompat.app.AppCompatActivity;importandroid.content.Intent;import.Uri;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;importandroid.widget.EditText;publicclassMainActivityextendsAppCompatActivity{privateButtondial;privateEditTexttel_numb;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dial=(Button)findViewById(R.id.bnt_mybut);tel_numb=(EditText)findViewById(R.id.et_tel);dial.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){Stringtelstr=tel_numb.getText().toString();Uriuri=Uri.parse("tel:"+telstr);Intentintent=newIntent();intent.setAction(Intent.ACTION_DIAL);intent.setData(uri);startActivity(intent);}};}}4.2.4按钮Button3)对MainActivity.java文件的说明(3)为Button控件注册侦听事件并定义匿名的内联消息处理函数
dial.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){Stringtelstr=tel_numb.getText().toString();Uriuri=Uri.parse("tel:"+telstr);Intentintent=newIntent();intent.setAction(Intent.ACTION_DIAL);intent.setData(uri);startActivity(intent);}});(1)定义了两个变量:
privateButtondial;privateEditTexttel_numb;(2)初始化成员变量
dial=(Button)findViewById(R.id.bnt_mybut);tel_numb=(EditText)findViewById(R.id.et_tel);4.2.4按钮Button单击Button按钮前后的运行效果图4.2.4按钮Button在Android中,对Button按钮的单击事件还可以采用设置Button控件的XML属性中Onclick属性的方法(1)设置Button控件的Onclick属性。按照下图将Button控件的Onclick属性设置为“onBntClicked”,同时在activity_main.xml文件的Button控件代码中增加如下的一行代码:android:onClick="onBntClicked"完整的Button的xml代码如下:<Buttonandroid:id="@+id/bnt_mybut"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="拨打电话"android:onClick="onBntCikcked"/>4.2.4按钮ButtononBntClicked实际上对应一个同名消息处理函数的onBntClicked(),当该按钮被单击时会执行该函数(2)在MainActivity.java增加消息处理函数。onBntClicked()定义在布局文件相对应的Activity文件中,函数定义如下:publicvoidonBntClicked(Viewview){}MainActivity类完整的代码如下所示:publicclassMainActivityextendsAppCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}publicvoidonBntCikcked(Viewv){EditTexttel_numb;tel_numb=(EditText)findViewById(R.id.et_tel);Stringtelstr=tel_numb.getText().toString();Uriuri=Uri.parse("tel:"+telstr);Intentintent=newIntent();intent.setAction(Intent.ACTION_DIAL);intent.setData(uri);startActivity(intent);}4.2.5单选按钮RadioButton和复选按钮CheckBox1.RadioButton和RadioGroupRadioButton是单选按钮,RadioButton的继承关系如所示,它是Button的子类。java.lang.Object
↳android.view.View
↳android.widget.TextView↳android.widget.Button↳android.widget.CompoundButton↳android.widget.RadioButtonRadioButton的继承关系RadioButton本身并不提供“单选”的机制,要使一组RadioButton中每次只有一个能被选取,就必须将它们放在RadioGroup控件中。由RadioGroup负责控制其内RadioButton的状态。当用户选取任一个选项就会取消其它RadioButton的选取状态,保证只能有一个RadioButton被选中。因此Radiogroup可以看作是能够实现将一组RadioButton构成多选一的容器。4.2.5单选按钮RadioButton和复选按钮CheckBox放置在一个RadioGroup容器中的所有RadioButton控件为一组,同一组的RadioButton控件至少有两个,并且只能选中一个,不同RadioGroup的RadioButton之间互不干扰。RadioGroup控件的orientation属性决定放置在其内的RadioButton的排列方式,当orientation=horizontal时,其包含的RadioButton水平排列,当orientation=vertical时,其包含的RadioButton垂直排列。orientation=verticalorientation=horizontal4.2.5单选按钮RadioButton和复选按钮CheckBox2.CheckBoxCheckBox复选框的继承关系如图所示,它也是Button的子类java.lang.Object
↳android.view.View
↳android.widget.TextView↳android.widget.Button↳android.widget.CompoundButton↳android.widget.CheckBoxCheckBox的继承关系CheckBox和RadioButton的主要区别在于:1)选中后再次单击的状态不同RadioButton按钮被选中后,再次单击状态不会改变,CheckBox会在选中和未选中之间进行切换。2)RadioButton的默认以圆形表示,CheckBox默认以矩形表示。4.2.5单选按钮RadioButton和复选按钮CheckBox3.RadioButton和CheckBox的访问RadioButton、CheckBox与普通Button按钮的区别是具有选中功能,因此可以通过android:checked属性设置该控件是否被选中。单选和复选按钮都必须指定android:id属性值,否则无法编程实现控制。RadioButton和CheckBox的编程控制有两种方法:1)注册Button的OnClickListener侦听器这种方法与Button的方法相同,需要在事件处理函数中判断每一个按钮的选中状态。2)注册OnCheckedChangeListener侦听器在onCheckedChange(booleanisChecked)事件处理方法中根据isChecked参数判断按钮是否被选中。4.2.5单选按钮RadioButton和复选按钮CheckBox对于RadioButton可以通过RadioGroup提供的方法来设置和获取用户选择,RadioButton的常用方法如下方法说明Check通过参数ID设置选中的单选钮getCheckedRadioButtonId()选取被选中单选按钮的IDclearCheck()将组中所有单选钮设置为未选中状态4.【例4-4】单选按钮和复选按钮举例。用户可以通过“红”、“绿”、“蓝”三个颜色单选按钮,以及三个“加粗”、“斜体”和“下划线”三个复选按钮的设置,实时改变文本框中字体的颜色和显示样式。创建一个工程名为project4_4的项目,包名为project4_4的空白工程,所需的设计文件如下序号文件名文件类型1MainActivity.java活动文档2activity_main.xml布局文件4.2.5单选按钮RadioButton和复选按钮CheckBox1)设计布局文件在布局文件中加入如下图所示的控件,并设置为图中的android:id和android.text属性。布局中的控件和名称4.2.5单选按钮RadioButton和复选按钮CheckBoxactivity_main.xml的完整UI布局代码(1)4.2.5单选按钮RadioButton和复选按钮CheckBox<?xmlversion="1.0"encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_alignParentTop="false"tools:context=".MainActivity"><LinearLayout
android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="20dp"android:orientation="vertical"android:paddingTop="40dp"tools:layout_editor_absoluteX="20dp"><TextViewandroid:id="@+id/tV_demo"android:layout_width="match_parent"android:layout_height="50dp"android:textSize="40dp"android:text="单选和复选按钮演示"/><LinearLayout
android:layout_width="match_parent"android:layout_height="30dp"android:orientation="horizontal"><TextViewandroid:id="@+id/textView2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="字体样式:"/>activity_main.xml的完整UI布局代码(2)4.2.5单选按钮RadioButton和复选按钮CheckBox<CheckBoxandroid:id="@+id/cB_Bold"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="加粗"/><CheckBoxandroid:id="@+id/cB_Italic"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="斜体"/><CheckBoxandroid:id="@+id/cB_Underline"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="下划线"/></LinearLayout><TextViewandroid:id="@+id/textView3"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_weight="1"android:text="字体颜色:"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="22dp">activity_main.xml的完整UI布局代码(3)4.2.5单选按钮RadioButton和复选按钮CheckBox<RadioGroupandroid:id="@+id/radioGroup"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><RadioButtonandroid:id="@+id/rB_red"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="红色"/><RadioButtonandroid:id="@+id/rB_green"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="绿色"/><RadioButtonandroid:id="@+id/rB_blue"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="蓝色"/></RadioGroup></LinearLayout></LinearLayout></androidx.constraintlayout.widget.ConstraintLayout>activity_main.xml对应的“Design”界面设计蓝图4.2.5单选按钮RadioButton和复选按钮CheckBox2)修改MainActivity.java文件在MainActivity类中增加成员变量,以方便获取用户对颜色单选按钮、字体样式复选按钮设置的更改,以及对文本框中控件文字显示输出设置的更改。颜色单选按钮的设置是通过对RadioGroup类型的成员变量m_radioGroup的访问而获得。字体样式复选按钮的设置是通过对3个CheckBox类型的成员变量的访问而获得。文本框控件的设置则是通过对TextView类型的m_demo变量的访问而获得。4.2.5单选按钮RadioButton和复选按钮CheckBox(1)定义的成员变量privateRadioGroupm_radioGroup;privateTextViewm_demo;privateCheckBoxm_bold,m_italic,m_undline;2)修改MainActivity.java文件4.2.5单选按钮RadioButton和复选按钮CheckBox(2)初始化上述步骤中定义的成员变量对应的控件m_radioGroup=(RadioGroup)findViewById(R.id.radioGroup);m_demo=(TextView)findViewById(R.id.tV_demo);m_bold=(CheckBox)findViewById(R.id.cB_Bold);m_italic=(CheckBox)findViewById(R.id.cB_Italic);m_undline=(CheckBox)findViewById(R.id.cB_Underline);2)修改MainActivity.java文件4.2.5单选按钮RadioButton和复选按钮CheckBox(3)注册单选按钮侦听事件。为RadioGroup控件注册OnCheckedChangeListener侦听事件,用于获取文本颜色单选按钮的设置m_radioGroup.setOnCheckedChangeListener(newRadioGroup.OnCheckedChangeListener(){@OverridepublicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){
color_apply();}});2)修改MainActivity.java文件4.2.5单选按钮RadioButton和复选按钮CheckBox(4)注册复选按钮侦听事件为复选按钮注册OnCheckedChangeListener侦听事件的处理函数为fStyle_apply(),用于获取字体样式的设置m_bold.setOnCheckedChangeListener(fStyle_apply);m_italic.setOnCheckedChangeListener(fStyle_apply);m_undline.setOnCheckedChangeListener(fStyle_apply)2)修改MainActivity.java文件4.2.5单选按钮RadioButton和复选按钮CheckBox(5)编写字体样式处理函数fStyle_apply()privateCompoundButton.OnCheckedChangeListenerfStyle_apply=newCompoundButton.OnCheckedChangeListener(){@OverridepublicvoidonCheckedChanged(CompoundButtonbuttonView,booleanisChecked){
switch(buttonView.getId()){caseR.id.cB_Bold:bold_it();break;caseR.id.cB_Italic:bold_it();break;caseR.id.cB_Underline:if(isChecked)m_demo.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);elsem_demo.getPaint().setFlags(0);m_demo.invalidate();//必须重新绘制break;}}};privatevoidbold_it(){booleant1,t2;t1=m_bold.isChecked();t2=m_italic.isChecked();if(t1&&t2)m_demo.setTypeface(Typeface.SANS_SERIF,Typeface.BOLD_ITALIC);elseif(!t1&&t2)m_demo.setTypeface(Typeface.SANS_SERIF,Typeface.ITALIC);elseif(t1&&!t2)m_demo.setTypeface(Typeface.DEFAULT_BOLD);elsem_demo.setTypeface(Typeface.DEFAULT);m_demo.invalidate()}2)修改MainActivity.java文件4.2.5单选按钮RadioButton和复选按钮CheckBox(6)编写颜色设置处理函数color_apply()privatevoidcolor_apply(){intid=m_radioGroup.getCheckedRadioButtonId(//判断颜色设置switch(id){caseR.id.rB_red:m_demo.setTextColor(Color.rgb(255,0,0));Break;caseR.id.rB_green:m_demo.setTextColor(Color.rgb(0,255,0));break;caseR.id.rB_blue:m_demo.setTextColor(Color.rgb(0,0,255));break;}}3)MainActivity.java完整代码(1)4.2.5单选按钮RadioButton和复选按钮CheckBoxpackageject4_4;importandroidx.appcompat.app.AppCompatActivity;importandroid.graphics.Color;importandroid.graphics.Paint;importandroid.graphics.Typeface;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;importandroid.widget.CheckBox;importandroid.widget.CompoundButton;importandroid.widget.RadioGroup;importandroid.widget.TextView;publicclassMainActivityextendsAppCompatActivity{privateRadioGroupm_radioGroup;privateTextViewm_demo;privateCheckBoxm_bold,m_italic,m_undline;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);m_radioGroup=(RadioGroup)findViewById(R.id.radioGroup);m_demo=(TextView)findViewById(R.id.tV_demo);m_bold=(CheckBox)findViewById(R.id.cB_Bold);m_italic=(CheckBox)findViewById(R.id.cB_Italic);m_undline=(CheckBox)findViewById(R.id.cB_Underline);
m_bold.setOnCheckedChangeListener(fStyle_apply);m_italic.setOnCheckedChangeListener(fStyle_apply);m_undline.setOnCheckedChangeListener(fStyle_apply);
m_radioGroup.setOnCheckedChangeListener(newRadioGroup.OnCheckedChangeListener(){@OverridepublicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){color_apply();}});}3)MainActivity.java完整代码(2)4.2.5单选按钮RadioButton和复选按钮CheckBoxprivatevoidcolor_apply(){intid=m_radioGroup.getCheckedRadioButtonId();//判断颜色设置switch(id){caseR.id.rB_red:
m_demo.setTextColor(Color.rgb(255,0,0));break;caseR.id.rB_green:
m_demo.setTextColor(Color.rgb(0,255,0));break;caseR.id.rB_blue:
m_demo.setTextColor(Color.rgb(0,0,255));break;}}privateCompoundButton.OnCheckedChangeListener
fStyle_apply=newCompoundButton.OnCheckedChangeListener(){@OverridepublicvoidonCheckedChanged(CompoundButton
buttonView,boolean
isChecked){switch(buttonView.getId()){caseR.id.cB_Bold:
bold_it();break;caseR.id.cB_Italic:
bold_it();break;case
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年教师资格证(小学)笔试模拟试卷(专项训练)
- 高校学生家庭情况调查表(完整版)2026年
- 2026年综合整治效果调查问卷
- 2026年生物技术发展与应用考试
- 2026年技术保密管理制度
- 2026年小学教师《教育学》模拟试卷专项训练
- 2026小升初数学暑假培优预习(苏科版)第01讲 数学与我们同行(原卷版)
- 2026年国庆节前安全教育培训
- 家电能效优化工程师考试试卷及答案
- 换热器设计工程师考试试卷及答案
- 某仪器仪表厂外协加工管控方案
- 3 b p m f公开课一等奖创新教学设计(2课时)
- 《四川省老旧小区物业服务标准》
- (完整版)钢筋混凝土挡土墙施工方案
- 信访紧急突发情况应急预案(3篇)
- 安徽省2025年公需科目三安徽农业大学测验参考答案
- DB32∕T 4972.8-2024 传染病突发公共卫生事件应急处置技术规范 第8部分:标本的采集、保存和运输
- 2024年江苏省南京市中考英语试卷真题(含答案)
- 肛裂中西医结合诊疗指南
- 麻醉患者恢复期的气道管理
- GA/T 701-2024安全防范指纹识别应用出入口控制指纹识别模块通用规范
评论
0/150
提交评论