Android应用开发基础教程(微课版) 课件 邓永生 第1-4章 Android基础- Activity_第1页
Android应用开发基础教程(微课版) 课件 邓永生 第1-4章 Android基础- Activity_第2页
Android应用开发基础教程(微课版) 课件 邓永生 第1-4章 Android基础- Activity_第3页
Android应用开发基础教程(微课版) 课件 邓永生 第1-4章 Android基础- Activity_第4页
Android应用开发基础教程(微课版) 课件 邓永生 第1-4章 Android基础- Activity_第5页
已阅读5页,还剩196页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Andriod应用开发基础教程平时成绩:40%(出勤、作业、课堂表现等)期末实践考核:30%(综合性项目)期末试卷考核:30%(纸质试卷)成绩构成课程内容1Android基础2常用布局3常用控件与消息处理4Activity5数据存储6ContentProvider7广播8Service9网络编程10高级应用第1章Android基础1.1Android的起源和发展1.2Android的系统构架1.3Android平台优势和劣势1.4Android开发环境搭建

Android(安卓)是一种基于Linux的开源操作系统,由Google公司和开放手机联盟领导及开发,主要用于移动终端设备,如智能手机、平板电脑等。

什么是Android?(1)Android

(2)iOS

(3)WindowsPhone(4)BlackBerryOS(黑莓)

(5)Symbian(塞班)

(6)

HarmonyOS(鸿蒙)

移动互联的快速发展离不开智能手机操作系统,常用的智能手机操作系统包括以下几种:1.1Android的起源和发展1.1.1Android的起源1.1.2Android的发展1.1.1Android的起源

1886年法国作家AugusteVilliersdel'Isle-Adam(耶·德·利尔-阿达姆·利尔亚当)在科幻小说《L'Èvefuture(未来夏娃)》中,他把外表像人的机器人取名为Android,这个词本意是“机器人”,这是Android一词最早出现在公众视野。2003年,AndyRubin创立了Android公司。AndroidLOGO的设计者绘制了一个简单的机器人,它的躯干就像锡罐的形状,头上还有两根天线。Android图标1.1.1.2Android的发展史

2003年10月,Android系统由AndyRubin等人创立2005年8月,Google收购了Android及其团队,AndyRubin成为Google公司工程部副总裁,继续负责Android项目2007年11月,Google公司正式对外展示了Android操作系统,并宣布与多家制造商共同研发改良Android系统2008年9月,Google公司正式发布了Android1.0系统,代号Astro(铁臂阿童木),这是Android系统最早的版本2008年10月,首款搭载安卓系统的设备HTCG1(也称为T-MobileG1)上市。HTCG1是一款具有全键盘设计的智能手机,标志着安卓系统正式进入公众视野Android最早的两个内部测试版本是以机器人名称来命名:AstroBoy(铁臂阿童木)和Bender(发条机器人),后因版权问题,从2009年Android1.5开始,谷歌将甜点作为Android系统版本代号,2019年Google官方宣布结束以甜点命名Android系统的方式,版本的内部代号仍以甜点命名。1.2Android的系统构架1.2Android的系统构架

1、应用层(Applications):应用层是Android系统的顶层,包括了各种预装和第三方应用程序,如电子邮件、浏览器、照相机、联系人等等。2、应用框架层(ApplicationFramework):开发人员可以访问核心应用程序所使用的API框架,是我们从事Android开发的基础,很多核心应用程序也是通过这一层来实现其核心功能的,开发人员可以直接使用其提供的组件来进行快速的应用程序开发,如Activity、Service、ContentProvider、BroadcastReceiver等。3、系统运行库层(Libraries):Android包含一些C/C++库,这些库能被Android系统中不同的组件使用,它们通过Android应用程序框架为开发者提供服务。其中,核心库包括系统C库(专门为基于EmbeddedLinux的设备定制)、媒体库(支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件)、SurfaceManager(管理显示子系统)、LibWebCore(web浏览器引擎)。4、Linux内核层(LinuxKernel):Android平台的基础是Linux内核,Android的Linuxkernel控制包括安全性,内存管理,进程管理,网络协议栈和驱动模型等。Linux内核也同时作为硬件和软件栈之间的抽象层。1.3

Android平台优势和劣势

Android平台优势包括以下几点:1、Android系统可搭载多种设备,如智能手表等可穿戴式设备、手机、平板电脑、电视、车辆仪表板、智能家居等,设备和屏幕兼容性较好。2、在安全性方面,用户在进行下载应用、浏览网页和分享数据、接收来电等操作时,Android都会实时保护,当遇到恶意应用或有害链接时,系统会自动提醒用户,并提供有关后续应对措施的建议,在Android设备上,用户对于自己的数据拥有绝对处理的权力,用户可自主决定是否、何时分享自己的数据,从而保障了用户的系统安全和数据安全。3、Android开放性允许任何移动终端厂商加入到Android联盟中来,使其拥有更多的开发者,有利于积累消费者和厂商。

Android平台劣势包括以下几点:1、Android平台由于开发便利,血腥、暴力、情色方面的程序和游戏难以控制。2、Android存在安全漏洞,“黑客”能实施远程窃取文件、查收电邮乃至盗取用户名和密码等违反活动。3、2023年11月,据证券时报消息,目前鸿蒙HarmonyOSNEXT开发者预览版已不兼容安卓,华为可能推出不兼容安卓的鸿蒙版本。1.4

Android开发环境搭建1.4.1AndroidStudio安装1.4.2AndroidStudio新建项目1.4.3AndroidStudio主界面、应用程序目录结构及相关文件介绍1.4.4模拟器的创建和管理1.4.1AndroidStudio安装

AndroidStudio是谷歌在2013年推出的一个Android集成开发工具,基于IntelliJIDEA,提供了集成的Android开发工具用于开发和调试,并在2015年发布了正式版1.3,使开发代码变得更加容易。AndroidStudio可从官网下载:/studio?hl=zh-cn

1.4.2AndroidStudio新建项目

AndroidStudio安装完成后,打开AndroidStudio依次点击文件>新建>新建项目

1.4.3AndroidStudio主界面、应用程序目录结构及相关文件介绍

Android模式下应用程序目录结构Android模式下res目录中包含存储在其子目录中的图片资源、布局资源、字符串资源等,res目录下的资源目录作用如下:1、drawable:放置位图文件(PNG、.9.png、JPG或GIF)或编译为可绘制资源子类型的XML文件;2、layout:放置定义界面布局的XML文件;3、mipmap:放置应用图标;4、values:放置字符串、整数和颜色等简单值的XML文件;5、xml:放置各种XML配置文件。

项目模式下应用程序目录结构项目模式下各目录和文件作用如下:1、.gradle:存放构建工具的jar包和wrapper等;2、.idea:放置AndroidStudioIDE所需要的文件;3、build:app模块编译输出的目录;4、libs:app模块专用库;5、src:放置app模块所有代码和资源文件;6、build.gradle(app模块中):app模块的gradle配置文件;7、:app模块的proguard文件;8、build.gradle(应用中):适用于所有模块的gradle配置文件;9、settings.gradle:定义项目包含哪些模块,负责配置子工程;10、perties:和gradle相关的全局属性设置文件;11、localproperties:本地属性设置文件(设置key和SDK的位置等);12、外部库:项目依赖的库,编译时自动下载

AndroidManifest.xml清单文件1<?xmlversion="1.0"encoding="utf-8"?>2<manifestxmlns:android="/apk/res/android"3xmlns:tools="/tools">4

5<!--allowBackup:提供了为应用程序数据的备份和恢复功能-->6<!--dataExtractionRules:控制自动备份-->7<!--fullBackupContent:指向包含备份规则的XML文件-->8<!--icon:普通图标;roundIcon:圆形图标-->9<!--label:程序名标签-->10<!--supportsRtl:支持右到左的布局-->11<!--theme:设置整个应用或者某个活动Activity的界面-->12<!--targetApi:目标版本-->13<!--name:设置Application子类的名称(注册自己的Application文件)-->14<application15android:allowBackup="true"16android:dataExtractionRules="@xml/data_extraction_rules"17android:fullBackupContent="@xml/backup_rules"18android:icon="@mipmap/ic_launcher"19android:label="@string/app_name"20android:roundIcon="@mipmap/ic_launcher_round"21android:supportsRtl="true"22android:theme="@style/Theme.Lesson"23tools:targetApi="31">24<activity25android:name=".MainActivity"26android:exported="true">27<!--intent-filter标签作用:把当前的MainActivity配置成为应用程序入口-->28<intent-filter>29<actionandroid:name="ent.action.MAIN"/>30

31<categoryandroid:name="ent.category.LAUNCHER"/>32</intent-filter>33</activity>34</application>35

36</manifest>

MainActivity.java:定义MainActivity布局的目的、功能,并包含各种方法的实际代码1//新建的Activity必须继承AppCompatActivity或者Activity2publicclassMainActivityextendsAppCompatActivity{3//onCreate方法是在Activity创建时被系统调用,是一个Activity生命周期的开始4@Override5protectedvoidonCreate(BundlesavedInstanceState){6//重写了父类中的onCreate方法7super.onCreate(savedInstanceState);8//与布局文件建立联系:res目录->layout目录->activity_main.xml布局文件9setContentView(R.layout.activity_main);10}11}

activity_main.xml:布局文件,定义页面样式1<?xmlversion="1.0"encoding="utf-8"?>2<androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="/apk/res/android"3xmlns:app="/apk/res-auto"4xmlns:tools="/tools"5android:layout_width="match_parent"6android:layout_height="match_parent"7tools:context=".MainActivity">8

9<!--Android讲究逻辑与视图分离,所以在Activity是不写界面的,界面是放在局部文件里面的。-->10<!--ConstraintLayout:约束布局-->11<!--layout_width:设定宽度-->12<!--layout_height:设置高度-->13<!--text:设置文本内容-->14<TextView15android:layout_width="wrap_content"16android:layout_height="wrap_content"17android:text="HelloWorld!"18app:layout_constraintBottom_toBottomOf="parent"19app:layout_constraintEnd_toEndOf="parent"20app:layout_constraintStart_toStartOf="parent"21app:layout_constraintTop_toTopOf="parent"/>22

23</androidx.constraintlayout.widget.ConstraintLayout>1.4.4模拟器的创建和管理

Android模拟器包含在AndroidStudio中,是AndroidStudio中用于模拟Android设备的一个虚拟环境,这样就可以在各种设备上以及各个AndroidAPI级别测试应用程序,而无需拥有实体设备,具有灵活度高、高还原度和测试结果迅速等优势。

Andriod应用开发基础教程第2章常用布局

布局定义了应用中的界面结构,布局中的所有元素都是建立在View(视图)和ViewGroup(视图容器)的基础上的。View通常绘制用户可以看到的控件,例如Button(按钮)和TextView(文本框),是Android所有控件的的基类,View本身可以是单个控件也可以是由多个控件组成的一组控件,通过这种关系就形成了View树的结构。View还包含事件处理使用户和界面可以进行交互。ViewGroup是一个不可见的容器,例如LinearLayout(线性布局)和ConstraintLayout(约束),它定义了View和其他ViewGroup对象的布局结构,ViewGroup是View的子类因此它也是View,但是ViewGroup可以容纳View和ViewGroup,但View不可以再容纳其他View或ViewGroup。图2-1

Android界面视图层次结构

布局可以通过以下两种方式声明:1、在XML中声明UI元素:Android开发中最常用的布局方式,可以通过XML文件定义UI控件的位置、大小、颜色等属性。2、JAVA代码中实例化布局元素:Android还允许通过代码来动态创建布局,这通常在需要动态调整布局或在复杂布局时使用。代码布局相比XML布局更加灵活,但是过度使用代码布局会使得代码变得难以维护且不符合MVC的设计原则,通常建议在简单布局中使用代码布局,在需要重用布局或者需要动态调整布局时使用XML布局。2.1线性布局

线性布局(LinearLayout)是Android开发中最基础且常用的布局方式之一,适合比较简单的布局场景,它允许开发者将子视图按照垂直或水平方向进行有序排列。在XML中运用线性布局只需在根元素层级内添加一个<LinearLayout>标签并设置相应的属性和布局参数即可。

表2-1线性布局中常用的属性属性属性值作用android:orientationvertical:垂直horizontal:水平设置布局的方向android:layout_widthandroid:layout_heightwrap_content:根据内容自适应大小match_parent:匹配父容器的大小具体像素值:如10dp定义LinearLayout本身的宽度和高度android:layout_gravitycenter_horizontal:水平居中center_vertical:垂直居中center:居中left、right:左部、右部top、bottom:上部、下部子视图在LinearLayout内部的对齐方式android:gravity同layout_gravity设置自身内部元素的对齐方式android:layout_weight整数控制子视图在垂直或水平方向上占据的空间比例android:layout_marginandroid:padding具体像素值:如5dp分别设置LinearLayout的外边距和内边距案例2.1

使用线性布局制作如图2-2所示的用户登录界面(参考代码见LinearLayoutActivity)图2-2用户登录应用界面2.2相对布局相对布局(RelativeLayout),顾名思义,就是需要有一个参照物,根据参照物来确定视图的位置,该参照物可以是其它视图,也可以是父容器。通过前面的线性布局案例可以发现,如果需要在多个方向上进行布局,就要嵌套多个线性布局。界面越复杂工作量越大,为了减少工作量可以在需要嵌套多个线性布局才能实现的布局中使用相对布局。相对布局十分灵活,可以实现复杂界面的设计,但掌握起来比较难。表2-2相对布局中常用的属性属性属性值作用与父容器定位相关属性android:layout_alignParentToptrue、false值为true时此视图的顶部与父视图的顶部边缘对齐android:layout_alignParentBottomtrue、false值为true时此视图的底部与父视图的底部边缘对齐android:layout_alignParentLefttrue、false值为true时此视图的左部与父视图的左部边缘对齐android:layout_alignParentRighttrue、false值为true时此视图的右部与父视图的右部边缘对齐android:layout_alignParentStarttrue、false值为true时此视图的起始边与父视图的右部起始边对齐android:layout_alignParentEndtrue、false值为true时此视图的结束边与父视图的右部结束边对齐android:layout_centerInParenttrue、false值为true时此视图位于父视图的居中位置android:layout_centerHorizontaltrue、false值为true时此视图位于父视图的水平方向上的居中位置android:layout_centerVerticaltrue、false值为true时此视图位于父视图的垂直方向上的居中位置相对其它视图定位属性android:layout_above其他视图id将此视图的底部边缘定位在给定视图的上方android:layout_below其他视图id将此视图的顶部边缘定位在给定视图的下方android:layout_toLeftOf其他视图id将此视图的右部边缘定位在给定视图的左方android:layout_toRightOf其他视图id将此视图的左部边缘定位在给定视图的右方android:layout_alignTop其他视图id将此视图的顶部边缘和给定视图的顶部边缘对齐android:layout_alignBottom其他视图id将此视图的底部边缘与给定视图的底部边缘对齐android:layout_alignLeft其他视图id将此视图的左部边缘与给定视图的左部边缘对齐android:layout_alignRight其他视图id将此视图的右部边缘与给定视图的右部边缘对齐android:layout_alignStart其他视图id将此视图的起始边与给定视图的起始边对齐android:layout_alignEnd其他视图id将此视图的结束边与给定视图的结束边对齐android:layout_alignBaseline其他视图id将此视图的基线与给定视图的基线对齐案例2.2

相对布局中视图相对于父容器的位置演示(参考代码见:RelativeLayoutActivity)android:layout_centerInParent="true"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:layout_alignParentTop="true"android:layout_alignParentBottom="true"android:layout_alignParentRight="true"android:layout_alignParentLeft="true"案例2.3

相对布局中视图相对于其它视图的位置演示(参考代码见:RelativeLayoutActivity)android:layout_above="@+id/reference_1"android:layout_below="@+id/reference_2"android:layout_toLeftOf="@+id/reference_3"android:layout_toRightOf="@+id/reference_4"android:layout_alignTop="@+id/reference_5"android:layout_alignBottom="@+id/reference_6"android:layout_alignLeft="@+id/reference_7"android:layout_alignRight="@+id/reference_8"案例2.4

用相对布局完成案例2-1的用户登录界面(参考代码见:RelativeLayoutActivity)RelativeLayoutActivity加载布局文件activity_relative_layout_land.xml,运行RelativeLayoutActivity后生成应用界面如图2-2所示,用户名密码登陆部分代码部分得到了精简,可见相对布局在复杂界面设计中可一定程度上减少布局嵌套,优化代码。2.3绝对布局

AbsoluteLayout(绝对布局)中的控件是通过指定其在父容器中的精确坐标来确定的,否则将会被排在左上角,而手机应用需要适应不同的屏幕大小,而这种布局模型不能自适应屏幕尺寸大小,所以应用的相对较少。表2-3绝对布局中常用的属性属性属性值作用android:layout_x具体像素值:如20dp设置视图X坐标android:layout_y具体像素值设置视图Y坐标案例2.5

绝对布局演示(参考代码见:AbsoluteLayoutActivity)2.4表格布局

Android中也允许使用表格行与列的方式来排列控件即表格布局(TableLayout)。表格布局不需要声明包含了多少行、多少列,而是通过添加<TableRow>标签和其他控件的方式来确定表格的行数和列数,使用表格布局有以下注意事项;1、如果直接在TableLayout中添加控件,那么控件将和父容器等宽;2、如果想让控件出现在同一行,那么这些控件的外层一定要加一对<TableRow>;3、在TableRow中的控件,宽度都是默认wrap_content。表2-4

表格布局中常用的属性属性属性值作用android:stretchColumns列的索引值,从0开始,多个列索引值必须用逗号隔开,也可用通过“*”代替所有列拉伸列以填满剩下的多余空白空间。android:shrinkColumns收缩列。当可收缩的列过宽(内容过多)不会被挤出屏幕,注意:一列能同时收缩和拉伸android:collapseColumns隐藏列,从页面消失不占空间android:layout_span列数量列数跨度,指定当前View所占的列数。如android:layout_span="2"该控件占据2列android:layout_column列的索引值设置当前View所在的列,如android:layout_column="1"该控件显示在第2列案例2.6

使用表格布局设计一个简单的计算器界面。(参考代码见:TableLayoutActivity)2.5网格布局

网格布局(GridLayout)相对于表格布局和线性布局嵌套更加灵活,网格布局中可以自定义网格行数和列数、控件位于网格的行列位置、控件跨越的行列数及控件排列方式等网格布局和线性布局一样,也分为水平和垂直两种方式,默认水平布局下一个控件挨着一个控件从左到右依次排列,达到设置列数后控件会自动换行进行排列。表2-5网格布局中常用的属性属性属性值作用android:columnCount整数定义网格列数android:rowCount定义网格行数android:layout_columnSpan设置当前Viw所占的列数android:layout_rowSpan设置当前Viw所占的行数android:layout_column设置当前view所在的列注:某控件跨越多行或多列,需要将该控件的lavout_rowSpan或lavout_columnSpan属性设置为跨越的行列数,再设置layout_gravity=“fill”,表明该控件填满所跨越的行或列。案例2.7

使用网格布局改进计算器界面显示(参考代码见:GridLayoutActivity)2.6帧布局

帧布局(FrameLayout)是一种可叠加的布局,后添加的控件会层叠在先添加的控件上,后添加控件会覆盖先添加的控件。表2-6帧布局的常用属性属性属性值作用android:layout_marginTop像素值设置上外边距android:layout_marginBottom设置下外边距android:layout_marginLeft‌设置左外边距android:layout_marginRight‌设置右外边距android:paddingLeft‌设置左内边距android:paddingRight设置右内边距android:paddingTop设置上内边距android:paddingBottom‌设置下内边距android:gravitycenter、left、right等位置值控制子View在父容器内部的位置案例2.8

帧布局演示(参考代码见:FrameLayoutActivity)2.7约束布局

约束布局(ConstraintLayout)主要是为了解决布局嵌套过多的问题,它通过定义界面元素之间的相对位置和尺寸关系,自动调整布局以适应不同的屏幕尺寸和方向。要在约束布局中定义某个视图的位置,必须为该视图添加至少一个水平约束条件和一个垂直约束条件,每个约束条件均表示与其他视图、父布局或隐形引导线之间连接或对齐方式。2.7.1添加删除约束

成功创建ConstraintLayoutActivity后,在本模块res资源目录下打开布局文件activity_constraint_layout.xml,点击界面“Design”进入Design(设计)界面添加约束条件前先从“Palette”中拖入控件到Design界面中选中“Button”后可见该控件四周出现蓝色矩形框,该方框四个角有4个实心方框,四条边中心位置有4个空心圆圈,鼠标左键拖动这四个4个实心方框可对Button控件进行拉伸收缩操作,鼠标左键按住空心圆圈,将其拖动到边界或其它控件对应位置,即可为该控件添加对应的水平或垂直约束删除约束时,可以一次性删除所有约束,也可删除指定的约束1、删除所有约束:点击Design界面中的“ClearAllConstraints”。2、删除指定的约束:选中约束对应的圆点后按下“Delete”键。2.7.2约束布局中的约束方式

1、相对定位约束相对定位约束即用目标控件对被约束控件进行约束定位,需要注意的是垂直方向的约束,其目标控件件的约束也必须是垂直方向的,同理水平方向的约束,其目标控件的约束也必须是水平方向的。表2-7常用的相对定位约束属性及说明要设置被约束控件在父控件或目标控件居中对齐方法如下:(1)垂直居中layout_constraintBottom_toBottomOf="parent"layout_constraintTop_toTopOf="parent"(2)水平居中layout_constraintLeft_toLeftOf="parent"layout_constraintRight_toRightOf="parent"(3)垂直水平居中layout_constraintBottom_toBottomOf="parent"layout_constraintTop_toTopOf="parent"layout_constraintLeft_toLeftOf="parent"layout_constraintRight_toRightOf="parent"2、角度定位约束约束布局中的角度定位,通过设置角度和距离来确定两个控件的相对位置,其中距离是指被约束控件和目标控件中心点距离,角度是以Y轴正半轴为旋转起始线顺时针旋转来计算的。表2-8常用的角度定位约束属性及说明当角度设置为0时,被约束控件在目标控件正上方;当角度设置为90时,被约束控件在目标控件正右方;当角度设置为180时,被约束控件在目标控件正下方;当角度设置为270时,被约束控件在目标控件正左方。属性属性值作用android:layout_constraintCircle目标控件id用目标控件中心点确定定位原点android:layout_constraintCircleAngle角度旋转角度android:layout_constraintCircleRadius像素值被约束控件和目标控件中心点距离3、引导线约束可以添加垂直或水平引导线来约束控件,该引导线用户不可见。引导线定位需要先设置引导线方向再确定引导线的起始位置,起始位置可用像素值或百分比设置。表2-9常用的引导线约束属性及说明属性属性值作用android:orientationvertical:垂直horizontal:水平设置引导线的显示方向android:layout_constraintGuide_begin像素值设置引导线的起始距离android:layout_constraintGuide_end像素值设置引导线的结束距离android:layout_constraintGuide_percent0-1之间小数以比例方式设置引导线的起始距离4、尺寸约束约束布局中还支持控件尺寸约束,如约束控件最大最小高宽度、控件高宽比、控件尺寸和父布局尺寸的百分比等。表2-10尺寸束属性及说明属性属性值作用控件高度或宽度为wrap_content时,可以约束其最大最小的高宽度android:minWidth像素值设置被约束控件最小的宽度android:minHeight像素值设置被约束控件最小的高度android:maxWidth像素值设置被约束控件最大的宽度android:maxHeight像素值设置被约束控件最大的高度修改控件高宽为0dp,控件尺寸可按照父布局尺寸的百分比来设置android:layout_constraintWidth_percent0-1之间小数宽度占父布局百分比比例android:layout_constraintHeight_percent0-1之间小数高度占父布局百分比比例当宽高有一个被设置为0dp时,可设置宽高比android:layout_constraintDimensionRatio比例值被约束控件宽高比设置2.7.3边距和偏移

边距即设置被约束控件外边距对其定位,偏移是为了让当前的控件不再居中而是具有偏向性,可以通过定义偏移属性来实现,偏移属性设置了左侧和上方的百分比数值,数值越小当前控件会更加靠近左侧或者上方,如果不设置偏移属性值默认为0.5即被约束控件居中。表2-11边距和偏移属性及说明属性属性值作用android:layout_marginLeft像素值设置控件在其左边的外边距android:layout_marginRight像素值设置控件在其右边的外边距android:layout_marginTop像素值设置控件在其顶部的外边距android:layout_marginBottom像素值设置控件在其底部的外边距android:layout_constraintHorizontal_bias0-1间小数水平偏移,0:最左边,1:最右边android:layout_constraintVertical_bias0-1间小数垂直偏移,0:最上面,1:最下面案例2.9

用Button演示相对定位约束,Button之间的约束如右图所示。(参考代码见:ConstraintLayoutActivity)案例2.10

角度定位约束演示。(参考代码见:ConstraintLayoutActivity)角度为120度,约束控件和目标控件中心距离为300dp。案例2.11

引导线约束演示。(参考代码见:ConstraintLayoutActivity)1、在Design界面中加上一根垂直引导线,引导线距离父容器左边边缘的距离占父容器宽度的百分比为50%,再加上三根水平引导线,这三根引导线距离顶部边缘的距离占父容器高度的百分比分别为25%、50%和75%

2、水平垂直引导线添加好后,再在约束布局中添加控件使其受引导线约束,控件受约束条件如下图所示。

3、引导线约束添加好后,运行ConstraintLayoutActivity。案例2.12

尺寸约束演示。(参考代码见:ConstraintLayoutActivity)Andriod应用开发基础教程第3章常用控件与消息处理在Android开发中,控件是构建用户界面的基本元素,它们提供了与用户的交互方式。Android提供了多种控件,控件的添加有两种方法,第一种是在在布局文件的Design界面中有一个Palette面板,该面板中包含了Android中的大部分控件,拖动所需控件到应用界面即可,第二种是在布局文件编辑代码添加控件。表3-1常用控件列表控件分类控件列表文本类TextView、EditText按钮类Button、ImageButton、RadioButton、CheckBox、ToggleButton时间类DatePicker、TimePicker、CalendarView、AnalogClock布局类ConstraintLayout、LinearLayout、TableLayout、RelativeLayout、GridLayout、FrameLayout图片类ImageView、ImageButton进度类SeekBar、ProgressBar滚动条类HorizontalScrollView、ScrollView多媒体类VideoView、MediaController、SurfaceView菜单类OptionMenu、ContextMenu、PopupMenu对话框类AlertDialog、自定义Dialog表3-2控件通用属性属性属性值作用android:id@id/Name:使用已存在id@+id/Name:添加新的id设置控件idandroid:layout_widthandroid:layout_heightwrap_content:根据内容自适应大小match_parent:匹配父容器的大小具体像素值:如10dp定义控件的宽度和高度android:layout_gravitycenter_horizontal:水平居中center_vertical:垂直居中center:居中left、right:左部、右部top、bottom:上部、下部子控件在父容器内部对齐方式android:gravity同layout_gravity设置自身内部元素的对齐方式android:layout_marginandroid:padding具体像素值:如5dp设置控件的外边距和内边距android:backgroundrgb数值设置背景颜色android:visibilitytrue、false设置控件的可见性android:clickabletrue、false设置控件是否响应点击事件android:alpha0到1之间数值控件透明度设置3.1事件处理

在Android开发中,事件处理机制是用户交互界面的核心部分,Android通过事件处理机制,确保用户的点击、触摸、设备的屏幕旋转、按键操作等事件能够得到及时的响应和处理。对事件处理方式主要有两种:基于监听器的事件处理和基于回调的事件处理,事件处理的流程大致如下:1、用户与设备交互,如点击按钮、触摸屏幕等产生事件;2、事件源捕获到事件,并将事件传递给事件分发器(EventDispatcher);3、事件分发器根据事件的类型和事件源的类型,找到对应的事件监听器或回调函数;4、事件分发器调用事件监听器或回调函数中的相应方法,对事件进行处理;5、处理完成后,事件监听器或回调函数将处理结果返回给事件分发器;6、事件分发器将处理结果传递回事件源,并更新界面或执行其他操作。3.1.1基于监听的事件处理

基于监听器的事件处理是Android中最常用的事件处理方式,这种方式是通过在事件源上注册事件监听器来监听事件,当事件发生时,事件源会调用监听器中的相应方法,从而实现对事件的处理。事件监听处理主要涉及到3个对象:1、事件源(EventSource):产生事件的控件,如按钮、文本框等;2、事件(Event):由事件源产生的动作或状态变化,如点击事件、触摸事件、设备的屏幕旋转、按键操作等;3、事件监听器(EventListener):用于监听事件源产生的事件,并对事件进行处理的接口或类。基于监听接口的事件处理中需首先将事件监听器注册到事件源,当用户与设备交互时便会触发事件源上的事件生成事件对象,事件触发事件监听器,事件监听器再调用事件处理器处理相应事件事件监听器能处理的事件类型有单击事件、长按事件、焦点改变事件等,处理这些事件时事件监听器必须实现View类中的内部接口事件监听器处理事件类型实现接口接口需实现的方法单击事件View.OnClickListenerpublicvoidonClick(Viewv)长按事件View.OnLongClickListenerpublicbooleanonLongClick(Viewview)焦点改变事件View.onFocusChangeListenerpublicbooleanonFocusChange(Viewv,booleanhasFocus)按键事件View.OnKeyListenerpublicbooleanonKey(Viewv,intkeyCode,KeyEventkeyEvent)触摸事件View.OnTouchListenerpublicbooleanonTouch(Viewv,MotionEventmotionEvent)基于监听的事件处理方式中每个控件均可以针对特定的事件指定一个事件监听器,每个事件监听器也可以监听一个或多个事件源,因为同一个事件源上可能发生多种事件,不同事件可以交给不同的事件监听器来处理,同时也可以让一类事件都使用同一个事件监听器来处理。3.1.2基于回调的事件处理

所谓的回调函数是指在A类中定义了一个方法,这个方法中用到了一个接口和该接口中的抽象方法,但是抽象方法没有具体的实现,需要B类去实现,B类实现该方法后,它本身不会去调用该方法,而是传递给A类,供A类去调用,这种机制就称为回调。基于回调的事件处理是另一种常见的事件处理方式,它通过在事件源上设置回调函数来监听事件,这种事件处理方式事件源与事件监听器是统一的,或者说没有事件监听器。当事件发生时,事件源会调用回调函数来处理事件。这种方式不如基于监听器的事件处理灵活和可扩展。表3-6Android系统提供的常用回调方法方法说明booleanonKeyDown(intkeyCode,KeyEventevent)用户在该控件上按下某个键时触发的方法booleanonKeyLongPress(intkeyCode,KeyEventevent)用户在该控件上长按某个键时触发的方法booleanonKeyShortcut(intkeyCode,KeyEventevent)当一个键盘快捷键事件发生时触发该方法booleanonKeyUp(intkeyCode,KeyEventevent)用户在该控件上松开某个键时触发的方法booleanonTouchEvent(MotionEventevent)用户在该控件上触发触摸事件触发的方法booleanonTrackballEvent(MotionEventevent)用户在该控件上触发触摸轨迹触发的方法booleanonFocusChanged(MotionEventevent)用户在该控件上焦点发生改变触发的方法3.2文本类控件3.2.1TextView

TextView意为文本框,向用户显示文本,并允许用户编辑文本,TextView是一个完整的文本编辑器,但基类被配置为不允许编辑。TextView类继承自View类,是View类的一个子类。TextView常用的一种控件,属性也是比较繁多的,可设置文字的字体大小、颜色、背景色、边距等基本样式。表3-7TextView常用属性表3-7TextView常用属性案例3.1

显示不同样式的TextView。(参考代码见:TextViewActivity)界面中显示了不同样式的TextView:带图片的、有阴影的、有超长文字的、单击可用默认浏览器打开网址的、没有文字显示提示信息的。案例3.2

为TextView添加单击事件监听器,点击TextView在应用屏幕上向用户显示一条TextView中的文本内容信息,一段时间后信息自动消失。(参考代码见:TextViewActivity)3.2.2EditText

EditText意为编辑框,EditText类继承自TextView,但允许用户改变其中的内容,属性和用法与TextView一致。表3-8EditText常用属性属性属性描述android:inputType设置文本输入类型:"none":未指定明确类型"text":输入普通字符"textCapCharacters":所有字母大写"textCapWords":单词首字母大写"textCapSentences":每句的第一个字母大写"textAutoCorrect":自动对文本进行纠正"textAutoComplete":自动完成文本"textMultiLine":多行输入"textImeMultiLine":输入法多行(不一定支持)"textNoSuggestions":不提示"textUri":URI格式"textEmailAddress":电子邮件地址格式"textEmailSubject":邮件主题格式"textShortMessage":短消息格式"textLongMessage":长消息格式"textPersonName":人名格式"textPostalAddress":邮政格式"textPassword":密码格式"textVisiblePassword":密码可见格式"textWebEditText":作为网页表单的文本格式"textFilter":文本筛选格式"textPhonetic":拼音输入格式"number":数字格式(不能输入小数点)"numberSigned":有符号数字格式"numberDecimal":可以带小数点的浮点格式(可输入小数点)"phone":拨号键盘"datetime":日期+时间格式"date":日期键盘"time":时间键盘android:selectAllOnFocus点击编辑框获得焦点后:true:选中编辑框中所有的文本内容false:将光标移动到文本的开始或者结尾android:singleLinetrue:限制EditText只允许单行输入,而且不会滚动false:多行输入显示android:cursorVisibletrue:显示光标false:不显示光标android:maxLength设置最大输入字符个数,再多了就输入不进去了android:focusable是否可获取焦点(为false时,软键盘永不弹出)android:imeOptions软键盘回车键/确认键显示功能:actionGo:去往,通常用于打开链接actionNext:下一步,通常用于跳转到下一个EditTextactionSend:发送,通常用于发送信息actionSearch:搜索,通常用于搜索信息actionDone:完成,通常表示事情做完了actionNone:未指定,编辑框右侧不带任何提示android:digits限制编辑框中只能输入自己定义的字符串,如果输入其它将不予以显示编辑框输入信息软小键盘的控制可通过在模块下的AndroidMinifest.xml<activity>标签设置属性windowSoftInputMode即可android:windowSoftInputMode可选属性值对软键盘作用如下:(1)stateUnspecified:软键盘的默认状态,EditText获取焦点的时候才会弹出;(2)stateUnchanged:软键盘将一直保持在上一个activity里的状态,无论是可见还是隐藏;(3)stateHidden:用户选择activity时,软键盘总是被隐藏;(4)stateAlwaysHidden:当Activity的主窗口有输入焦点时始终隐藏软键盘;(5)stateVisible:当Activity的主窗口有输入焦点时始终显示软键盘;(6)stateAlwaysVisible:Activity的主窗口有输入焦点时始终显示软键盘;(7)adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示,并且会调整布局进而使输入内容始终可见;(8)adjustResize:始终调整Activity主窗口的尺寸来为屏幕上的软键盘腾出空间,通常意味着窗口的内容会向上移动,以便为键盘腾出空间,实际上就是给根布局加Padding,padding的值就是软键盘的高度;(9)adjustPan:不调整Activity主窗口的尺寸来为软键盘腾出空间,而是自动平移窗口的内容,使当前焦点永远不被键盘遮盖,让用户始终都能看到其输入的内容。实际上就是布局整体向上滚动,上滚动的布局是根据当前焦点所在的位置确定的。(10)adjustNothing:Activity窗口不会做任何调整,窗口的内容也不会改变。案例3.3

使用TextView和EditText设计一个用户注册界面,用户名(用户名只能为中文或英文)和密码不为空时显示注册成功,否则显示提示信息。(参考代码见:EditTextActivity)android:inputType="textPersonName"android:inputType="date"android:inputType="textEmailAddress"android:inputType="phone"android:inputType="textPassword"用户名判断可用正则表达式://用正则表达式匹配输入的用户名,只能为英文或中文Stringregex="[[\\u4e00-\\u9fa5]|[a-zA-Z]]+";//匹配用户名的正则表达式Patternpattern=Ppile(regex);//编译正则表达式Matchermatcher=pattern.matcher(name);//创建匹配器3.3图片控件图片控件可以用ImageView实现,lmageView继承自View,是Android开发中最常用的控件之一,主要用于显示图片,也可以用于显示Drawable对象,ImageView既可以加载本地图片也可以加载资源目录下drawable、mipmap中的图片。表3-9ImageView常用属性属性属性描述android:src设置ImageView图片内容,区别android:background:android:background-设置背景样式,会根据ImageView给定的宽度来拉伸图片进行填充android:src-设置ImageView图片内容,是ImageView特有的一个属性,用来设置ImageView要展示的图片,不会对图片进行拉伸android:maxHeight设置ImageView的最大高度android:maxWidth设置ImageView的最大宽度android:adjustViewBounds设置在ImageView调整边界时是否保持图片的纵横比例,需要与android:maxWidth、android:MaxHeight一起使用,单独使用没有效果android:cropToPadding设置是否剪切图片以适应内边距的大小android:tint设置图片渲染颜色,单独设置时,会覆盖掉原有背景图片,需要与android:tintMode一起使用android:tintMode图像混合技术中用Sa、Da分别代表源图像和目标图像透明度,Sc、Dc分别代表源图像和目标图像的颜色值,在做图片颜色渲染时目标图像指图片,源图像指渲染颜色。android:tintMode属性设置图片渲染的混合模式,[]左侧表示输出的透明度值,右侧表示输出的颜色值。src_over:在目标图像的上方绘制源图像,[Sa+(1-Sa)*Da,Sc+(1-Sa)*Dc]src_in:只在源图像和目标图像相交的地方绘制目标图像,[Sa*Da,Sc*Da]src_atop:在目标图像和源图像相交的地方绘制源图像而在不相交的地方绘制目标图像,[Da,Sc*Da+(1-Sa)*Dc]multiply:混合,[Sa*Da,Sc*Dc]add:饱和度相加,[max(0,min(Sa+Da,1)),max(0,min(Sc+Dc,1))]screen:[Sa+Da-Sa*Da,Sc+Dc-Sc*Dc]android:scaleType设置是否改变图片比例以及超出部分如何裁剪:matrix:按照矩阵方式缩放,不调整图片大小,从左上角开始往右下角绘制,如果超出的

ImageView的范围则直接舍弃。不改比例、会裁剪fitXY:从横纵两个方向对图片进行缩放,以占满整个ImageView,改比例、不裁剪fitStart:将图片等比例缩放,直至能够完全显示,然后将图片至于ImageView的左上角。不改比例、不裁剪。fitCenter:和fitStart类似,只不过会将图片居中放置。不改比例、不裁剪。fitEnd:和fitStart类似,只不过会将图片放在ImageView的右下角。不改比例、不裁剪。center:直接将图片原封不动的放到ImageView中央,多余部分裁剪掉。不改比例、裁剪。centerCrop:等比例缩放图片,直至图片能够完全占满ImageView,占满之后多余部分会被裁剪掉。不改比例、裁剪。centerInside:保持原始比例的缩放图片,直至能够完整显示图片的内容。不改比例、不裁剪。案例3.4

图片颜色渲染不同模式演示,鼠标单击图片切换渲染模式(参考代码见:ImageViewTintActivity)案例3.5

演示android:scaleType属性值对ImageView加入图片效果影响(参考代码见:ImageViewscaleTypeActivity)鼠标单击图片即可改变android:scaleType属性值,使得图片在ImageView中有不同的呈现效果3.4按钮类控件3.4.1Button

Button类继承自TextView,所以Button能使用TextView的属性和方法,如设置按钮长宽度、背景颜色、显示的文本内容等,区别在于:1、Button拥有默认的按钮背景,而TextView默认无背景;2、Button的内部文本默认居中对齐,而TextView的内部文本默认靠左对齐;3、Button会默认将英文字母转为大写,而TextView保持原始的英文大小写;用户可通过在资源目录res下drawable创建xml文件自定义Button的样式,如圆角、渐变、大小、描边等等,首先依次选择res>drawable>新建>DrawableResourceFile,在弹出的NewDrawableResourceFile面板中Rootelement选择写入shape,Filename自定义xml文件创建好后,用户可以在<shape>标签中可通过android:shape属性定义Button的形状,<shape>标签下还可以继续添加子xml标签定义Button的其他样式表3-10标签可选属性作用标签名属性作用<shape>android:shape设置Button形状:rectangle:矩形oval:椭圆line:线ring:圆环<corners>android:radiusandroid:topLeftRadiusandroid:topRightRadiusandroid:bottomLeftRadiusandroid:bottomRightRadius设置圆角半径,属性值为整数<gradient>android:angle="integer"android:centerX="integer"android:centerY="integer"android:centerColor="integer"android:endColor="color"android:gradientRadius="integer"android:startColor="color"android:type=["linear"|"radial"|"sweep"]android:useLevel=["true"|"false"]设置渐变<padding>android:left="integer"android:top="integer"android:right="integer"android:bottom="integer"设置各方向间距<size>android:width="integer"android:height="integer"设置大小<stroke>android:width="integer"android:color="color"android:dashWidth="integer"android:dashGap="integer"设置描边<solid>android:color设置填充颜色注:为了避免主题样式对显示效果的影响,可修改模块下res资源目录中values目录下themes.xml文件:<stylename="Base.Theme.MyApplication"parent="Theme.Material3.DayNight.NoActionBar">为<stylename="Base.Theme.MyApplication"parent="Theme.MaterialComponents.DayNight.NoActionBar.Bridge">即可。案例3.6

自定义Button样式。(参考代码见:ButtonActivity)Button样式设置文件my_button.xml:1<?xmlversion="1.0"encoding="utf-8"?>2<shapexmlns:android="/apk/res/android"3android:shape="rectangle">4<!--矩形-->5<cornersandroid:radius="10dp"/><!--设置圆角半径-->6<gradient7android:centerColor="#7cfc00"8android:endColor="#4169e1"9android:startColor="#d3d3d3"10android:type="linear"/><!--设置渐变-->11<padding12android:top="2dp"13android:bottom="2dp"14android:left="2dp"15android:right="2dp"/><!--设置各方向间距-->16<size17android:width="100dp"18android:height="50dp"/><!--设置大小-->19<stroke20android:width="2dp"21android:color="#000000"/><!--设置描边-->22<

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论