AndroidUI基本控件与事件处理
- 格式:pdf
- 大小:619.96 KB
- 文档页数:20
Android应用开发中的常用技术随着智能手机的普及,Android应用开发也成为了一个越来越重要的开发领域。
在Android应用开发中,有一些常用的技术,下面将会详细介绍这些技术并分为以下几个类别:UI设计、数据库、网络通信和开发框架。
一、UI设计在Android应用开发中,UI设计是最基础、也是最重要的环节之一,因为它关系到用户体验和用户对应用的第一印象。
以下是几个常用的UI设计技术:1. XML布局:Android应用的界面布局一般使用XML文件来实现,XML 可以很容易地描述一个UI界面中各种视图的排列方式和事件的处理。
2. Material Design:Material Design 是Google官方推出的一种UI 设计风格,它非常重视用户体验,注重美观和易用性,并提供了一系列的设计规范和样式。
3. 控件定制化:在开发中,有时候我们需要一些非标准的控件或者特殊的UI效果,这时就需要对控件进行定制化开发,适应应用的需求。
二、数据库在Android应用的开发过程中,数据持久化和管理是很重要的一部分,以下是一些常用的数据库技术:1. SQLite:SQLite是Android平台默认提供的一种数据库,它是一种轻量级的嵌入式数据库,支持事务和常用的SQL语句。
2. SharedPreferences:SharedPreferences是Android系统提供的一种轻量级数据存储方式,它只能存储一些基本类型数据,如字符串、整数等,但具有快速访问和易用性的特点。
3. ORM框架:ORM(Object-Relational Mapping)框架可以将数据映射到Java对象上,使得开发人员不用直接与SQL语句打交道,使得数据管理更加方便。
三、网络通信在现代应用开发中,网络通信是必不可少的一部分,以下是一些常用的网络通信技术:1. HttpURLConnection:HttpURLConnection是Android系统提供的一种HTTP通信方式,它可以发送HTTP请求并接收服务器返回的数据,当然我们也可以对它进行拓展。
一、实验目的通过本次实验,掌握安卓常用控件的基本属性、方法和事件处理,熟悉这些控件在实际应用中的使用方法,提高对安卓界面设计的理解和应用能力。
二、实验环境1. 操作系统:Windows 102. 开发工具:Android Studio3.5.33. 手机型号:华为Mate 20三、实验内容本次实验主要涉及以下安卓常用控件:1. TextView2. EditText3. Button4. ImageView5. RadioButton6. CheckBox7. Spinner8. ListView四、实验步骤1. 创建一个新的Android项目,命名为“ControlOperation”。
2. 在布局文件activity_main.xml中添加以下控件:```xml<TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="Hello World!"android:layout_marginTop="20dp" /><EditTextandroid:id="@+id/editText1"android:layout_width="match_parent"android:layout_height="wrap_content" android:hint="Enter your name" /><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="Click Me!" /><ImageViewandroid:id="@+id/imageView1"android:layout_width="wrap_content"android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <RadioButtonandroid:id="@+id/radioButton1"android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="Male" /><CheckBoxandroid:id="@+id/checkbox1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Subscribe to newsletter" /><Spinnerandroid:id="@+id/spinner1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:entries="@array/countries" /><ListViewandroid:id="@+id/listView1"android:layout_width="match_parent"android:layout_height="wrap_content" />```3. 在strings.xml文件中添加以下字符串资源:```xml<string name="app_name">Control Operation</string> <string name="enter_name">Enter your name</string> <string name="click_me">Click Me!</string><string-array name="countries"><item>China</item><item>USA</item><item>Japan</item></string-array>```4. 在MainActivity.java文件中添加以下代码:```javaimport android.os.Bundle;import android.view.View;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.RadioButton;import android.widget.RadioGroup;import android.widget.ScrollView;import android.widget.TextView;import android.widget.CheckBox;import android.widget.Spinner;import android.widget.ListView;import android.widget.ArrayAdapter;import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private TextView textView1;private EditText editText1;private Button button1;private ImageView imageView1;private RadioButton radioButton1;private CheckBox checkBox1;private Spinner spinner1;private ListView listView1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);textView1 = findViewById(R.id.textView1);editText1 = findViewById(R.id.editText1);button1 = findViewById(R.id.button1);imageView1 = findViewById(R.id.imageView1);radioButton1 = findViewById(R.id.radioButton1);checkBox1 = findViewById(R.id.checkbox1);spinner1 = findViewById(R.id.spinner1);listView1 = findViewById(R.id.listView1);ArrayAdapter<CharSequence> adapter =ArrayAdapter.createFromResource(this,R.array.countries, yout.simple_spinner_item);adapter.setDropDownViewResource(yout.simple_spinner_dropdown _item);spinner1.setAdapter(adapter);button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String name = editText1.getText().toString();Toast.makeText(MainActivity.this, "Hello " + name, Toast.LENGTH_SHORT).show();}});radioButton1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this, "You selected Male", Toast.LENGTH_SHORT).show();}});checkBox1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (checkBox1.isChecked()) {Toast.makeText(MainActivity.this, "You subscribed to the newsletter", Toast.LENGTH_SHORT).show();} else {Toast.makeText(MainActivity.this, "You unsubscribed from the newsletter", Toast.LENGTH_SHORT).show();}}});}}```5. 运行程序,观察效果。
Android 事件处理机制Android 作为一款主流的移动操作系统,拥有强大的事件处理机制,使得开发者可以方便地对用户的操作进行响应和处理。
本文将介绍Android的事件处理机制及其相关的内容。
一、概述Android事件处理机制主要用于检测和响应用户在界面上的各种操作,包括点击、滑动、长按等。
通过灵活运用Android事件处理机制,开发者可以实现丰富多样的用户交互效果,提升应用的用户体验。
二、事件传递1. 事件传递的核心概念- 事件传递分为三个阶段:事件分发、事件拦截、事件处理。
- 事件的传递是从上至下的过程,即从Activity到ViewGroup,再到最终的View。
2. 事件分发- 事件首先会被分发给当前界面的顶层View的dispatchTouchEvent()方法进行处理。
- 顶层View会根据具体的触摸事件类型(DOWN、MOVE、UP、CANCEL)进行相应的处理。
3. 事件拦截- 如果顶层View在处理事件后,认为自己不能完全处理该事件,则会将事件交给子View处理,通过调用子View的dispatchTouchEvent()方法传递事件给子View。
- 子View可以通过重写onInterceptTouchEvent()方法来决定是否拦截事件。
4. 事件处理- 最终,事件会传递到具体的View上,并通过重写onTouchEvent()方法来实现事件的处理。
- View可以根据具体的事件类型(点击、滑动、长按等)执行相应的操作。
三、事件分发机制1. 事件分发的层级关系- Android中的事件分发机制是基于层级关系的,即不同的ViewGroup和View之间存在不同的事件分发机制。
- ViewGroup和View都重写了dispatchTouchEvent()方法,用于对事件进行分发。
2. ViewGroup中的事件分发- ViewGroup会根据具体的事件类型,将事件传递给自己的子View。
实验指导(一)——搭建平台和HelloWorld——UI设计:布局、控件、事件处理实验一:搭建平台和HelloWorld实验目的本次实验的目的是让大家熟悉搭建智能手机开发平台的过程,了解Andorid开发项目的基本文件目录结构,并实现HelloWorld小例程。
实验要求1.完成Android开发平台的搭建及相关配置2.创建项目并熟悉文件目录结构3.实现例程HelloWorld实验内容一、安装并配置Java JDK1.下载安装JDK,如安装目录为:C:\Program Files (x86)\Java\jdk1.6.0_18。
2.配置JDK:XP:右键“我的电脑”→“属性”→“高级”→“环境变量”WIN7:右键“我的电脑”→“高级系统设置”→“环境变量”新建系统变量:JAVA_HOME,C:\Program Files (x86)\Java\jdk1.6.0_18(JDK安装目录)。
PATH,%JAVA_HOME%\bin;%JAVA_HOME%\jr\bin。
CLASSPATH,.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(前面的.;一定要加上)配置完成后在CMD中输入java –version和javac –version,能看到对应的JDK版本即配置成功,如下图所示。
二、安装MyEclipse或Eclipse安装平台。
三、安装Android SDK1.下载Android SDK地址:/android/android-sdk_r05-windows.zip。
注意SDK的版本为r05,对应的ADT版本应为10.0.0,SDK和ADT需要对应才能正常运行程序。
2.安装SDK安装过程可能碰到的问题1:弹出窗口“Failed to fetch url…”需要如下设置:关闭该窗口→点击“cancel”→在左侧选择“Settings”→选中“Force https://...”→点击“Save and Apply”→重新运行安装文件。
控件的属性事件及方法控件是在应用程序中用于显示和接收用户输入的元素。
每个控件都有其自己的属性、事件和方法,可以通过这些属性、事件和方法来对控件进行操作和处理。
本文将详细介绍控件的属性、事件和方法。
1.属性:属性是控件的特征和状态,可以通过设置属性来改变控件的外观和行为。
常见的控件属性包括:- Visible:控件是否可见。
当Visible属性设置为True时,控件将在应用程序界面中显示;当设置为False时,控件将隐藏。
- Caption:控件的标题或文本。
可以通过设置Caption属性来改变控件上显示的文字内容。
- Enabled:控件是否可用。
当Enabled属性设置为True时,表示控件可以接受用户的输入和操作;当设置为False时,控件将不响应用户的操作。
- Width和Height:控件的宽度和高度。
可以通过设置Width和Height属性来改变控件的尺寸大小。
- Name:控件的标识符。
通过设置Name属性可以为控件分配一个唯一的名称,以便在代码中引用该控件。
2.事件:事件是在特定的操作或条件发生时自动触发的动作。
可以通过响应事件来处理用户的操作和改变控件的状态。
常见的控件事件包括:- Click:鼠标单击事件。
当用户点击控件时,会触发Click事件,可以在该事件中编写相应的处理代码。
- KeyDown和KeyUp:键盘按下和释放事件。
当用户按下或释放键盘上的按键时,会触发相应的KeyDown和KeyUp事件,可以通过处理这些事件来响应键盘输入。
- MouseEnter和MouseLeave:鼠标进入和离开事件。
当用户将鼠标移动到控件上时,会触发MouseEnter事件;当鼠标移出控件时,会触发MouseLeave事件,可以在这些事件中编写相应的处理代码。
3.方法:方法是控件可以执行的操作。
通过调用方法,可以实现对控件的一些特定操作。
常见的控件方法包括:- Show和Hide:显示和隐藏控件。
1,TextView用于在界面上显示文字,内容不可编辑,继承View2,EditText是可供用户编辑内容的文本框。
继承TextView,可重用TextView定义的属性3,按钮控件Button,继承TextView,ImageButton继承ImageViewButton可根据用户的操作动态切换图片,需定义drawable资源<selector><?xml version="1.0" encoding="utf-8"?><selector xmlns:android="/apk/res/android"><item android:drawable="@drawable/app_icon" android:state_pressed="true"/> <item android:drawable="@drawable/app_notes"android:state_pressed="false"/> </selector>4,单选按钮RadioButton继承至Button按钮。
可通过android:checked属性指定是否选中。
一组RadioButton只能选择其一,因此它需要与RadioGroup一起使用。
5,复选框按钮CheckBox。
继承至Button按钮。
可通过android:checked属性指定是否选中7,AnalogClock继承View,重写了onDraw()方法。
显示模拟时钟,不会显示当前的秒数。
DigitalClock继承TextView.显示数字时钟,会显示当前秒数。
8,图片显示控件ImageView,继承View,任何Drawable对象都可以用它来显示,注意src 属性和background属性的区别9,自动完成AutoCompleteTextView继承至EditText,当用户输入信息后,会显示下拉菜单10,MultiAutoCompleteTextView可支持选择多个值,分别用分隔符分开,并且在每个值选中的时候再次输入值时会自动去匹配,它与AutoCompleteTextView的区别是AutoCompleteTextView一个文本框只能输入一个值,而MultiAutoCompleteTextView可以输入多个值,中间的分隔符在代码中设置11,日期时间控件DatePicker/TimePicker,继承至FrameLayout,DatePicker用于选择日期,TimePicker用于选择时间12,进度条ProgressBar用于向用户显示某个耗时操作完成的百分比,可通过style属性为其指定风格,setProgress(int) 设置进度完成的百分比,incrementProgressBy(int) 设置增量/减量13,拖动条seekBar,继承AbsSeekBar,通常用于对系统的某些参数进行调节,允许改变滑块的外观,Android:thumb 用来指定一个Drawable对象,OnSeekBarChangeListener可处理滑动事件14,星级评分条RatingBar,继承AbsSeekBar,OnRatingBarChangeListener可处理评分事件15,代表应用程序的菜单Menu,Android中的菜单需要用户单击手机上的“MENU”按键时才会显示。
《Android基础应用》
AndroidUI基本控件与事件处理
⏹本章任务
⏹使用Android开发本息计算器程序
⏹使用Android开发华氏-摄氏温度转换器
⏹本章目标
⏹熟悉掌握本章基本控件的使用
⏹熟练掌握Android常用事件
1.Android基本控件
Android应用开发的一项内容就是用户界面的开发,Android提供了大量功能丰富的UI组件,大部分放在android.widget包及其子包android.view包及其子包
在Android当中View类是最基本的一个UI类,基本上所有的高级UI组件都是继承View类而实现的。
如Button(按钮),list(列表),EditText(编辑框),RadioButton(多选按钮),Checkbox(选择框)等都是View类
在Android中,我们可以在Xml文件中使用UI组件也可以在java文件中创建UI组件官方建议采用xml方式,这样的话能够实现界面和代码分离
1.1TextView和EditText
TextView是一种用于显示字符串的控件
EditText则是用来输入和编辑字符串的控件,EditText是一个具有编辑功能的TextView
TextView和EditText基本属性
●android:id设置ID,通过编码可以找到这个组件
●android:layout_width设置在屏幕上的宽度
●android:layout_height设置在屏幕上的高度
fill_parent强制性地使构件扩展,以填充布局单元内尽可能多的空间
wrap_content强制性地使视图扩展以显示全部内容
●android:text设置显示的文本信息
●android:textColor设置文本颜色
●android:textSize设置文本尺寸
示例的现实结果
1.2Button和ImageButton
Button是一种按钮控件,用户能够在该控件上点击,并后引发相应的事件处理函数ImageButton用以实现能够显示图像功能的控件按钮
示例
示例的现实结果
1.3CheckBox和RadioButton
CheckBox是一个同时可以选择多个选项的控件
RadioButton则是仅可以选择一个选项的控件
示例
1.4 开发本息计算器界面
需求说明
银行提供整存整取定期储蓄业务,年利率为(一年 2.25%,两年 2.7%,三年
3.24%,五年3.6%),要求输入本金数目和存款年限,计算到期取款时银行应支付本息
开发思路
开发页面main.xml
按效果图进行布局
示例
练习——开发本息计算器界面
2.Android事件处理
事件处理的概念
任何应用最终都是要面对用户的,经常处理的是用户的动作,也就是说要为用户的动作提供响应,这种为为用户动作提供响应的机制就是事件处理
Android提供了强大的事件处理机制
基于监听的事件处理
●主要就是为Android界面组件绑定特定的事件监听器
基于回调的时间处理
●主要做法是重写Android组件特定的回调函数,Android大部分界面组件
都提供了事件响应的回调函数,我们只要重写它们就行
2.1基于监听的事件处理
这是更具“面向对象”性质的事件处理方式,与java中的AWT,Swing开发中的处理相同在监听器模型中,主要涉及三类对象
事件源Event Source:产生事件的来源,通常是各种组件,如按钮,窗口等
事件Event:事件封装了界面组件上发生的特定事件的具体信息,如果监听器需要获取界面组件上所发生事件的相关信息,一般通过事件Event对象来传递 事件监听器Event Listener:负责监听事件源发生的事件,并对不同的事件做相应的处理
基于监听器的事件处理机制是一种委派式Delegation的事件处理方式,事件源将整个事件委托给事件监听器,由监听器对事件进行响应处理。
这种处理方式将事件源和事件监听器分离,有利于提供程序的可维护性
使用步骤
●获取普通的界面组件(事件源),也就是被监听德对象
●实现事件监听类,该监听类是一个特殊的Java类,必须实现一个XXXListener
接口
●调用事件源的setXXXListener方法将事件监听器对象注册给普通组件(事件
源)
事件处理流程
●当事件源发生指定的事件时,Android会触发事件监听器,由事件监听器调
用相关的方法(事件处理器)来处理事件
实现方式一内部类形式
实现方式二匿名内部类形式
实现方式二匿名内部类形式二
实现方式三类本身作为监听器形式
实现方式四外部类作为监听器形式
2.2基于监听的事件处理几种实现方式的总结
内部类形式
●内部类是在类的内部定义的,可以自由访问外部类的组件
匿名内部类形式
●大部分时候事件处理类没有复用的价值,只是临时使用一次,所以这种方式
使用较为广泛
类本身作为监听器形式
●可以直接在GUI界面类中定义事件处理方法,形式简洁
●缺点会造成程序的混乱
外部类作为监听器形式
●较为少见
●不能自由访问GUI界面中的组件
●不利于程序的内聚性,事件处理通常属于特定的GUI
2.3基于回调的事件处理
与基于监听的委托式的事件处理相反,事件源与事件监听器是统一的,也就是说没有独立的事件监听器存在,当用户在组件上激发某个事件时,组件自己特定的方法将会处理该事件,通常通过重写Override组件类的事件处理函数实现事件的处理
例如View类:View类实现了KeyEvent.Callback接口中的一系列回调函数,因此,基于回调的事件处理机制通过自定义View来实现,自定义View时重写这些事件处理方法即可
几乎所有基于回调的事件处理函数都会返回一个boolean类型值,该返回值用于标识该处理函数是否能完全处理该事件
返回true,表明该函数已完全处理该事件,该事件不会传播出去
返回false,表明该函数未完全处理该事件,该事件会传播出去
Android的事件处理机制保证基于监听器的事件处理会优先于基于回调的事件处理被触发;
触摸屏事件,当用手或者用笔在触摸屏上做动作时发生
2.4 基于回调与基于监听的事件处理对比
基于监听器的事件模型符合单一职责原则,事件源和事件监听器分开实现; 基于回调的事件处理机制会更好的提高程序的内聚性
练习——事件处理
需求说明:
布局文件中放五个按钮
分别使用不同的监听方式为按钮生成处理事件
内部类形式
匿名内部类形式(2)
类本身作为监听器形式
外部类作为监听器形式
3.开发本息计算器
开发Activity
●为“提交”按钮绑定事件,输出本息总额;为“重置”按钮绑定事件,清空
各项内容
“重置”按钮绑定事件
提交”按钮绑定事件
练习——开发本息计算器
需求说明:
银行提供整存整取定期储蓄业务,编写一个程序,输入本金数目和存款年限,计算
到期取款时银行应支付的本息
练习——开发温度转换器
需求说明:
用户输入华氏温度或者摄氏温度,转换并输出另外一种温度值
F=9/5c+32, 或C=5/9(F-32)
总结
列举Android中的基本控件?
Android中的事件处理方式?
两种事件处理方式的对比。