版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录1.1Android的发展和历史1.2搭建Android开发环境
1.3Android常见指令 1.4Android的日志工具Android应用开发环境Android应用开发环境
Android是由Android公司的创始人AndyRubin创立的一个手机操作系统,后来该公司被Google收购,而AndyRubin也成为Google公司的Android产品负责人。Google希望与各方共同建立一个标准化、开放式的移动电话软件平台,从而在移动产业内形成一个开放式的操作平台。1.1Android的发展和历史Android应用开发环境
Android1.0手机操作系统是Google于2007年11月5日发布的,这个版本的Android系统并没有赢得市场的广泛支持。2009年5月,Google发布了Android1.4,该版本提供了一个十分“豪华”的用户界面,而且提供了蓝牙连接支持。这个版本的Android吸引了大量开发者的目光。接下来,Android版本更新得较快,目前最新的Android版本是7.0。1.1.1Android的发展和简介Android应用开发环境市场上常见的其他手机操作系统还有:
iOS:Apple公司的手机、平板操作系统,市场占有率较高。
WindowsPhone:Microsoft公司的手机操作系统,2012年发布的最新版本为WindowsPhone8,但应用前景依然不够明朗。
Symbian:已经放弃,基本被淘汰。
BlackBerry:即将被淘汰。Android应用开发环境
目前Android系统的市场占有率已经远超iOS。WindowsPhone作为最后的“赌注”,Microsoft自然是全力以赴,希望至少能够与iOS、Android三足鼎立,但目前局势似乎并不乐观。因而无论从哪个角度来讲,Android都已成为最主流的手机操作系统。Android应用开发环境
Android系统的底层建立在Linux系统之上,该平台由操作系统、中间件、用户界面和应用软件4层组成,采用一种被称为软件叠层(SoftwareStack)的方式进行构建。软件叠层结构使得层与层之间相互分离,各层有明确的分工,这种分工保证了层与层之间的低耦合,当下层的层内或层下发生改变时,上层应用程序无需任何改变。1.1.2Android平台架构及其特性Android应用开发环境图1.1Android系统的体系结构Android应用开发环境
从图1.1中可以看出,Android系统主要由5部分组成,下面分别对这5部分进行简单介绍。1.应用程序层(APPLICATIONS)Android系统的核心应用程序,包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人等。这些应用程序都是用Java编写的。本书所要介绍的主要内容就是如何编写Android系统上的应用程序。Android应用开发环境
2.应用程序框架(APPLICATIONFRAMEWORK)
当我们开发Android应用程序时,就是面向对象的应用程序框架进行的。从这个意义上看,Android系统上的应用程序是完全平等的,不论是Android系统提供的程序,还是普通开发者提供的程序,都可以访问Android提供的API框架。
应用程序框架除了可以作为应用程序开发的基础之外,也是软件复用的重要手段,任何一个应用程序都可以发布它的功能模块——只要发布时遵守了框架的约定,其他应用程序都可以使用这个功能模块。Android应用开发环境
3.函数库(LIBRARIES)Android包含了一套被不同组件所用的C/C++库的集合。一般来说,Android应用开发者不能直接调用这套C/C++库集,但可以通过它上面的应用程序框架来调用这些库。
一些核心库:系统C库:一个从BSD系统派生出来的标准C系统库(libc),并且专门为嵌入式Linux设备调整过。
Android应用开发环境媒体库:基于PacketVideo的OpenCore,这套媒体库支持播放和录制许多流行的音频和视频格式,以及查看静态图片,主要包括MPEG4、H.264、MP3、AAC、AMR、JPG、PNG等多媒体格式。
SurfaceManager:管理对于现实子系统的访问,并可以对多个应用系统的2D和3D图层机提供无缝整合。
LibWebCore:一个全新的Web浏览器引擎,该引擎为Android浏览器提供支持,也为WebView提供支持,WebView可以完全嵌入开发者自己的应用程序中。本书后面会有关于WebView的介绍。Android应用开发环境SGL:底层的2D图形引擎。
3Dlibraries:基于OpenGLES1.0API实现的3D系统,该套3D库既可以使用硬件3D加速(如果硬件系统支持),也可以使用高度优化的软件3D加速。
FreeTye:位图和向量字体显示。
SQLite:供所有应用程序使用的、功能强大的轻量级关系数据库。Android应用开发环境
4.Android运行时(ANDROIDRUNTIME)Android运行时由两部分组成:Android核心库集和Dalvik虚拟机。其中核心库集提供了Java语言核心库所能使用的绝大部分功能,而虚拟机则负责运行Android应用程序。
每个Android应用程序都运行在单独的Dalvik虚拟机内(即每个Android应用程序对应一条Davlik进程),Dalvik专门针对同时高效地运行多个虚拟机进行了优化,因此Android系统已方便地实现对应用程序进行隔离。Android应用开发环境
JVM和Dalvik的区别:
JVM虚拟机运行的是Java字节码(通常就是.class文件),但Dalvik运行的是其专有的dex(DalvikExecutable)文件。JVM直接从.class文件或JRE包中加载字节码然后运行,而Dalvik则无法直接从.class文件或JRE包中加载字节码,它需要通过DX工具将应用程序的所有.class文件编译成.dex文件再运行。Dalvik虚拟机非常适合在移动终端上使用,相对于PC或服务器上运行的虚拟机而言,Dalvik虚拟机不需要很快的CPU计算速度和大量的内存空间。Android应用开发环境
Android的官方网站是http://,下载和安装AndroidSDK的步骤如下:(1)登录/sdk/index.html页面,点击最下方的DOWNLOAD
FOROTHERPLATFORMS链接。(2)找到页面上的“android-sdk_r21-windows.zip”链接,通过该链接即可下载Android4.2SDK压缩包。(3)下载完成后得到一个android-sdk_r21-windows.zip文件,将该文件解压缩后得到一个android-sdk-windows文件夹,该文件夹下包含如下文件结构:1.2搭建Android开发环境1.2.1下载和安装AndroidSDKAndroid应用开发环境
Add-ons:该目录下存放第三方公司为Android平台开发的附加功能系统。刚解压缩时该目录为空。Platforms:该目录下存放不同版本的Android系统。刚解压缩时该目录为空。Tools:该目录存放了大量Android开发、调试的工具。AVDManager.exe:该程序是AVD(Android虚拟设备)管理器。通过该工具可以管理AVD。SDKManager.exe:该程序就是AndroidSDK管理器。通过该工具可以管理AndroidSDK。(4)启动SDKManager.exe,即可看到如图1.2所示窗口。Android应用开发环境图1.2Android应用开发环境(5)在图1.2所示窗口左侧的列表中勾选需要安装的平台和工具,比如Android4.2的工具和平台,其中Android文档、SDKPlatform是必选的。如果想查看Android官方提供的示例程序、使用AndroidSDK的源代码,则可以勾选“SamplesforSDK”和“SourcesforAndroidSDK”两个列表项。至于是否需要安装Android早期版本的SDK,则取决于读者喜好。选中所需要安装的工具之后,点击“InstallSelected”按钮,将出现如图1.3所示窗口。Android应用开发环境
图1.3Android应用开发环境
(6)单击图1.3所示窗口的“Accept”单选按钮——确认需要安装所有的工具包,然后单击“Install”按钮,系统开始在线安装AndroidSDK及其相关工具。(7)安装完成后将可以看到在AndroidSDK目录下增加了如下几个文件夹:
docs:该文件夹下存放了AndroidSDK开发文件和API文档等。extras:该文件夹存放了Google提供的USB驱动、Intel提供的硬件加速等附加工具包。
Android应用开发环境platform-tools:该文件夹下存放了Android平台的相关工具。samples:该文件夹下存放了Android平台的示例程序。sources:该文件夹下存放了AndroidSDK4.2的源代码。(8)在命令窗口中可以使用AndroidSDK的各种工具,建议将AndroidSDK目录下的tools子目录、platform-tools子目录添加到系统的PATH环境变量中。Android应用开发环境
1.使用真机作为运行、调试环境使用真机作为运行调试环境时,只需要完成以下3步。(1)用USB连接线将Android手机连接到电脑上。(2)在电脑上为手机安装驱动,不同手机厂商的Android手机的驱动略有差异,需登录该手机厂商官网下载手机驱动。需要注意的是,电脑仅能识别Android手机的存储卡是不够的,安装驱动才能把Android手机整合成运行、调试环境。1.2.2安装运行、调试环境Android应用开发环境
(3)打开手机的调试模式。打开手机,依次点击“所有应用—设置—开发者选项”,进入如图1.4所示的设置界面。勾选“不锁定屏幕”、“USB调试”、“允许模拟位置”3个选项即可。如果开发者还有其他需要,也可以勾选其他的开发者选项。Android应用开发环境图1.4Android应用开发环境2.使用AVD作为运行、调试环境AndroidSDK为开发者提供了可以在电脑上运行的“虚拟手机”,称为
AndroidVirtualDevice(AVD)。
创建、删除和浏览AVD之前,应该先为AndroidSDK设置一个环境变量:ANDROID_SDK_HOME,该环境变量的值为磁盘上一个已有的路径。如果不设置该环境变量,开发者创建的虚拟设备默认保存在C:\DocumentsandSettings\<user_name>\.androidd目录下(以WindowsXP为例);如果设置了ANDROID_SDK_HOME环境变量,那么虚拟设备就会保存在%ANDROID_SDK_HOME%/.Android路径下。Android应用开发环境
(1)通过AndroidSDK安装目录下的AVDManager.exe启动AVD管理器,系统启动如图1.5所示的AVD管理器。单击该管理器左边的“AndroidVirtualDevices”项,管理器列出当前已有的AVD设备,如图1.5所示。图1.5Android应用开发环境
(2)单击图1.5所示窗口右边的“Create…”按钮,AVD管理器弹出如图1.6所示对话框。图1.6Android应用开发环境
(3)在图1.6所示的对话框中填写AVD设备的名称、Android平台的版本和虚拟SD卡的大小,然后单击该对话框下面的“OK”按钮,管理器即将开始创建AVD设备,
创建完成后,返回图1.5所示的窗口,该管理器将会列出当前所有可用的AVD设备。如果开发者想删除某个AVD设备,只要在图1.5所示窗口中指定AVD设备,然后单击右边的“Delete…”按钮即可。Android应用开发环境
(1) adbdevices(后面不能加分号;):列出连接在电脑上的设备,可以是模拟器或真实手机。(2) adbinstallhelloworld.apk(一个设备):安装一个apk如果有多个设备,会报错误,此时用-s设备名指定设备,例如:adb-semulator-5554install1.apk(多个设备)(3) adbuninstall(包名)
(一个设备):卸载apk。如果有多个设备,用-s设备名指定设备,例如:adb-semulator-5554uninstallcn.zengfansheng.helloworld(多个设备)1.3Android常见命令Android应用开发环境(4) ddms中Resetadb就是用下面两句命令实现的。重启adb的服务:adbkill-server——把adb调试桥的服务杀死(注意:kill和-server没有空格)。adbstart-server——把adb调试桥的服务重新开启(注意:kill和-server没有空格)。netstat–ano——查看网络连接状态Android应用开发环境(5) adbpull:从手机里面提取一个文件。也可提取多个文件,例如:adb-semulator-5554pull/mnt/sdcard/1.apk(多个模拟器和真机)(6) adbpush
:把电脑上的文件放在手机里面,例如:adb-semulator-5554pushHelloworld.apk/sdcard/1.apk(多个模拟器和真机)Android应用开发环境
Android中的日志工具类是Log(android.util.Log),该类中提供了以下几个方法供打印日志。1.Log.v()Log.v()方法用于打印那些最为琐碎的、意义最小的日志信息。对应级别verbose,是Android日志里面级别最低的一种。
2.Log.d()Log.d()方法用于打印一些调试信息,这些对调试程序和分析问题是有帮助的,对应级别debug,比verbose高一级。1.4Android的日志工具LogAndroid应用开发环境Log.d方法中传入了两个参数,第一个参数是tag,一般传入当前的类名,主要用于过滤打印信息。第二个参数是msg,即要打印的具体内容。3.Log.i()Log.i()方法用于打印一些比较重要的数据,这些数据可以分析用户行为。对应级别info,比debug高一级。Android应用开发环境4.Log.w()Log.w()方法用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,应尽快修复。对应级别warn,比info高一级。5.Log.e()Log.e()方法用于打印程序中的错误信息,比如程序进入到了catch语句当中。当有错误信息打印出来的时候,一般代表程序出现了严重问题,必须尽快修复。对应级别error,比warn高一级。目录2.1线性布局2.2相对布局
2.3表格布局
2.4帧布局2.5Android常见显示单位布局二、布局
线性布局分为垂直线性布局和水平线性布局。LinearLayout是线性布局控件,它包含的子控件将以横向或竖向的方式按照相对位置来排列所有的widgets或者其他的containers,超过边界时,某些控件将缺失或消失。因此一个垂直列表的每一行只会有一个widget或者是container,而不管他们有多宽;而一个水平列表将会只有一个行高(高度为最高子控件的高度加上边框高度)。LinearLayout保持其所包含的widgets或者是containers之间的间隔以及对齐方式(相对一个控件的右对齐、中间对齐或者左对齐)。2.1线性布局二、布局
LinearLayout属性如下:android:orientation:定义布局的方向——水平或垂直。android:layout_weight:子元素对未占用空间【水平或垂直】分配权重值,其值越小,权重越大。android:layout_width:宽度(fill_parent:父元素决定,wrap_content:本身的内容决定)。android:layout_height:高度(直接指定一个px值)。android:gravity:内容的排列形式(常用
top,bottom,left,right,center)。二、布局
根据一个实例来了解线性布局。
新建项目MyLayout,在activity_main中添加4个按钮,代码如下:activity_main.xml文件:代码MainActivity文件:代码
启动模拟器,运行结果如图2.1所示。图2.1二、布局
RelativeLayout称为相对布局,可以通过相对的定位方式让控件出现在布局的任何位置。RelativeLayout的属性:Android:ignoregravity:设置哪个组件不受gravity属性的影响。
2.2相对布局二、布局1)属性值为具体像素值的属性android:layout_marginBottom:离某元素底边缘的距离。android:layout_marginLeft:离某元素左边缘的距离。android:layout_marginRight:离某元素右边缘的距离。android:layout_marginTop:离某元素上边缘的距离。二、布局2)属性值为true或是false的属性android:layout_alignParentBottom:控制该组件是否和布局管理器底端对齐。android:layout_alignParentLeft:控制该组件是否和布局管理器左边对齐。android:layout_alignParentRight:控制该组件是否和布局管理器右边对齐。android:layout_alignParentTop:控制该组件是否和布局管理器顶部对齐。二、布局
3)属性值为其他组件ID的属性android:layout_toLeftOf:本组件在某组件的左边。android:layout_toRightOf:本组件在某组件的右边。android:layout_above:本组件在某组件的上方。android:layout_below:本组件在某组件的下方。二、布局
以一个项目为例来讲述相对布局的属性。
创建项目MyRelativeLayout,修改activity_main.xml的代码(添加五个按钮控件)。activity_main.xml文件:代码
MainActivity文件:代码
运行模拟器,结果如图2.2所示。图2.2二、布局
表格布局(TableLayout)即排成行和列的布局。一个TableLayout由若干TableRow组成,TableRow定义了一行。TableLayout容器不显示行、列或单元格边框线。每行有零个或多个单元格,每个单元格可容纳一个视图对象。
列的宽度是由该列中最宽的单元格决定的,通过调用setcolumnshrinkable()或setcolumnstretchable(),一个TableLayout可以指定某些列为收缩或伸展的。2.3表格布局二、布局TableLayout的子类不能指定宽度属性,宽度总是match_parent。而layout_height属性可以通过它的子控件来设置,默认值是wrap_content。如果子控件是个TableRow,那么它的高度总是wrap_content。
必须将单元格添加到递增列顺序中,无论是在代码或XML中。默认列数为零。如果你不指定一个孩子单元格列数,它将自动递增到下一个可用的列。如果你跳过了一个列号,它就会被认为是一个空单元格。二、布局。属性名相关方法描
述android:collapseColumnssetColumnCollapsed(int,boolean)设置需要隐藏的列android:shrinkColumnssetShrinkAllColumns(boolean)设置允许收缩的列android:stretchColumnssetStretchAllColumns(boolean)设置允许拉伸的列表2.1表格布局的XML属性二、布局表格布局案例:布局文件:activity_main.xml文件:代码使用Activity显示该布局,得到如图2.3所示效果。图2.3二、布局
帧布局是指在屏幕的一块区域中显示单独的一个元素。帧布局是最简单的布局形式。所有添加到这个布局中的视图都以层叠的方式显示。第一个添加的控件被放在最底层,最后一个添加到框架布局中的视图显示在最顶层,上一层的控件会覆盖下一层的控件。这种显示方式有些类似于堆栈。
2.4帧布局二、布局
当我们往帧布局中添加组件的时候,所有的组件都会放置于这块区域的左上角;帧布局的大小由子控件中最大的子控件决定;如果组件大小相同,同一时刻就只能看到最上面的那个组件。当然我们也可以为组件添加layout_gravity属性,从而制定组件的对齐方式。属性名相关方法描
述android:foregroundsetForeground(Drawable)设置前景图像android:foregroundGravitysetForegroundGravity(int)定义绘制前景图像的gravity属性android:measureAllChildrensetMeasureAllChildren(boolean)决定是否测量所有子类或只是那些在可见或不可见状态时测量表2.2帧布局的XML属性二、布局帧布局案例:布局文件:activity_main.xml文件:代码使用FrameLayout布局,得到如图2.4所示效果。图2.4二、布局1.像素px(pixels)px是像素的意思,即屏幕中可以显示的最小元素单位。Android应用程序中任何可见的图像都是由一个个像素点组成的。目前HVGA代表320×480像素。
一个组件的不同像素,在分辨率不同的手机上显示的效果是不同的。低分辨率的手机,图像看起来比较大;高分辨率手机,图像看起来比较小,用户体验不同。
2.5Android常见显示单位二、布局2.设备独立像素dip或dp(deviceindependentpixels)dip和设备硬件有关,不依赖像素。一般为了支持WVGA、HVGA和QVGA,推荐使用这种显示方式。
这里要特别注意,dip与屏幕密度有关,而屏幕密度又与具体的硬件有关,硬件设置不正确,有可能导致dip不能正常显示。在屏幕密度为160的显示屏上,1dip=1px,如果屏幕分辨率很高,如480×800,但是屏幕密度没有正确设置,比如说还是160,那么此时凡是使用dip的都会显示异常,普遍表现为显示过小。dip的换算:dip(value)=(int)(px(value)/1.5+0.5)二、布局3.比例像素sp(scaledpixels—bestfortextsize)sp主要处理字体的大小,用于字体显示,可以根据系统的字体自适应。
除了上面三个显示单位,还有如下几种不太常用的显示单位:
in(inches)英寸
mm(millimeters)毫米
pt(points)点,1/72英寸另外根据google的推荐,像素统一使用dip,字体统一使用sp。二、布局<LinearLayoutxmlns:android="/apk/res/android" xmlns:tools="/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!--按钮1--> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button1" android:text="button1"/>二、布局 <!--按钮2--> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button2" android:text="button2"/> <!--按钮3--> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button3" android:text="button3"/>二、布局 <!--按钮4--> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button4" android:text="button4"/></LinearLayout>back二、布局publicclassMainActivityextendsActivity{
@Override protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}}back二、布局<RelativeLayoutxmlns:android="/apk/res/android" xmlns:tools="/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <!--按钮1--> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:id="@+id/button1" android:text="button1"/>二、布局 <!--按钮2--> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button2" android:text="button2" android:layout_above="@+id/button1" android:layout_toLeftOf="@+id/button1"/>二、布局 <!--按钮3--> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button3" android:text="button3" android:layout_below="@+id/button1" android:layout_toLeftOf="@+id/button1"/>二、布局 <!--按钮4--> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button4" android:text="button4" android:layout_above="@+id/button1" android:layout_toRightOf="@+id/button1"/>二、布局 <!--按钮5--> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button5" android:text="button5" android:layout_below="@+id/button1" android:layout_toRightOf="@+id/button1"/></RelativeLayout>back二、布局publicclassMainActivityextendsActivity{ @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }}back二、布局<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">二、布局 <!--表格1-伸展--> <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:shrinkColumns="0,1,2"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="一行"/> <TableRow>二、布局 <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按钮1"> </Button> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按钮2"> </Button>二、布局
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按钮2"> </Button> </TableRow> <TableRow> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按钮4"> </Button>二、布局 <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_span="2" android:text="两列"> </Button> </TableRow> </TableLayout>二、布局 <!--表格2-收缩--> <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:stretchColumns="0,1"> <TableRow> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按钮A"/>二、布局 <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按钮B"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按钮C"/> </TableRow> </TableLayout></LinearLayout>back二、布局<FrameLayoutxmlns:android="/apk/res/android"
xmlns:tools="/tools" android:id="@+id/FrameLayout1" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:foregroundGravity="right|bottom">二、布局
<TextView android:layout_width="200dp" android:layout_height="200dp" android:background="#FF6143"/> <TextView android:layout_width="150dp" android:layout_height="150dp" android:background="#7BFE00"/> <TextView android:layout_width="100dp" android:layout_height="100dp" android:background="#FFFF00"/> </FrameLayout>back目录3.1控件概述3.2常用控件
三、
基本控件三、基本控件
Android界面控件分为定制控件和系统控件:(1)定制控件是指用户独立或者通过继承并修改View而产生的新控件,它能够为用户提供特殊的功能和与众不同的显示方式。(2)系统控件是Android系统提供给用户的已经封装的界面控件,包括应用程序开发过程中常用的功能控件。系统控件可以帮助用户进行快速的开发,并能够使Android系统应用程序的界面保持一致。3.1控件概述三、基本控件3.2常用控件3.2.1TextViewTextView是一种最简单的文本控件,它具有如表3.1所示的常用属性。属性名称说
明android:layout_widthTextView控件边框包围的内容有wrap_content,match_parent,fill_parentandroid:layout_heightTextView控件边框包围的内容有wrap_content,match_parent,fill_parentandroid:idTextView的idandroid:text文本的内容android:textSize文本的字号android:gravity文本的显示位置android:ellipsize内容的省略显示方式android:textStyle文本的字体android:autoLink链接类型表3.1TextView控件属性三、基本控件TextView的用法:
创建一个Android项目MyAndroid来完成登录界面的布局。在activity_main.xml里添加两个TextView控件——用户名和密码,代码如下所示:activity_main.xml文件:<RelativeLayoutxmlns:android=http:///apk/res/android xmlns:tools="/tools" android:layout_width="match_parent" android:layout_height="match_parent">三、基本控件<!—设置用户名布局--><TextView android:id="@+id/lblName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:textSize="20sp" android:layout_marginTop="8dp" android:text="用户名:"/>三、基本控件<!—设置密码布局--><TextView android:id="@+id/lblPwd" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/lblName" android:textSize="20sp" android:layout_marginTop="8dp" android:text="密
码:"/></RelativeLayout>三、基本控件MainActivity.java文件:
publicclassMainActivityextendsActivity{
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}}三、基本控件
启动模拟器,运行结果如图3.1所示。图3.1三、基本控件3.2.2EditText
EditText是一种简单的编辑框,是用来输入和编辑字符串的控件,是一种具有编辑功能的TextView。EditText是接受用户输入信息的最重要的控件。三、基本控件属
性说
明android:lines通过设置固定的行数来决定EditText控制的高度android:maxLines设置最大行数android:minLines设置最小行数android:password设置文本框中的内容是否显示密码android:phoneNumber设置文本框中的内容只能是电话号码android:numeric如果设置,则输入的内容只能是数字android:maxLength设置最大的显示长度android:singleLine是否在一行内显示全部内容android:inputType设置文本框中的内容是密码类型android:background设置背景android:hint文本为空时显示提示信息属
性说
明android:lines通过设置固定的行数来决定EditText控制的高度android:maxLines设置最大行数android:minLines设置最小行数android:password设置文本框中的内容是否显示密码android:phoneNumber设置文本框中的内容只能是电话号码android:numeric如果设置,则输入的内容只能是数字android:maxLength设置最大的显示长度android:singleLine是否在一行内显示全部内容android:inputType设置文本框中的内容是密码类型android:background设置背景android:hint文本为空时显示提示信息表3.2EditText控件属性三、基本控件示例:为用户名和密码分别添加编辑框。分别在上节两个TextView下添加EditText的代码:<EditText android:id="@+id/txtName" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toRightOf="@+id/lblName" android:layout_alignBottom="@+id/lblName" android:textSize="20sp" android:hint="请输入用户名"/>三、基本控件<EditText android:id="@+id/txtPwd" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toRightOf="@+id/lblPwd" android:layout_alignBottom="@+id/lblPwd" android:layout_alignRight="@+id/txtName" android:inputType="textPassword" android:textSize="20sp" android:numeric="integer" android:hint="请输入密码"/>三、基本控件
启动模拟器,运行项目后,输入用户名和密码,效果如图3.2所示:图3.2三、基本控件
3.2.3Button
Button控件是一种简单的按钮,是TextView控件的子类,具有TextView的所有属性。用户可以通过点击按钮来触发一系列事件,然后为Button控件注册监听,以实现Button控件的监听事件。
为Button控件注册监听常用的方法有两种:(1)在布局文件中为Button控件设置OnClick属性,然后在代码中添加一个对应的监听方法。(2)在代码中绑定匿名监听器并重写onClick()方法。三、基本控件示例:添加两个按钮“登录”和“取消”,并为两个按钮注册监听:<Button android:onClick="onClick" android:id="@+id/btnLogin" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/lblPwd"三、基本控件 android:layout_below="@+id/lblPwd" android:layout_marginLeft="48dp" android:layout_marginTop="38dp" android:textColor="#fff" android:background="@drawable/test" android:onClick="clickBtn" android:text="登录"/>三、基本控件<Button android:onClick="onClick" android:id="@+id/btnCancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/btnLogin" android:layout_alignBottom="@+id/btnLogin" android:layout_marginLeft="41dp" android:layout_toRightOf="@+id/btnLogin" android:textColor="#fff" android:background="@drawable/test" android:onClick="clickBtn" android:text="取消"/>三、基本控件在MainActivity.java中实现按钮的监听时间,代码如下:publicclassMainActivityextendsActivity{
//定义按钮组件
privateButtonbutton1;
privateButtonbutton2;
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mai
//得到Button的实例
Buttonbutton1=(Button)this.findViewById(R.id.btnLogin);
Buttonbutton2=(Button)this.findViewById(R.id.btnCancel);}三、基本控件publicvoidonClick(Viewview){
//用switch语句
switch(view.getId()){
caseR.id.btnLogin://注册按钮
//提示信息
Toast.makeText(getApplicationContext(),"登录成
功",1).show();
break;
三、基本控件 caseR.id.btnCancel://取消按钮
//提示信息
Toast.makeText(getApplicationContext(),"取",1).show();
break; default:
break;
} }}三、基本控件
启动模拟器,运行结果如图3.3所示。图3.3三、基本控件
3.2.4ImageView
ImageView类可以加载各种来源的图片(如资源或图片库),加载时需要计算图像的尺寸,以便它可以在其他布局中使用,控件提供缩放和着色(渲染)等各种显示选项。属
性说
明adnroid:scaleType控制图片如何resized/moved来匹对ImageView的sizeandroid:src设置View的图片资源位置android:tint将图片渲染成指定的颜色表3.3ImageView控件属性三、基本控件
在上一节布局的下面加载一个图片,在activity_main.xml中添加图片布局:<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageviw"//图片的id android:src="@drawable/ic_launcher"//设置图片 android:layout_centerInParent="true"/>
三、基本控件启动模拟器,运行的结果如图3.4所示:
图3.4三、基本控件
3.2.5ProgressBarProgressBar在界面上显示一个进度条,用于表示程序正在加载数据。ProgressBar的属性:android:visibility有三个默认值,分别为visible、invisible和gone。visible表示可见的,invisible表示不可见的,gone表示控件不仅不可见而且不再占用任何屏幕空间。三、基本控件在activity_main中添加ProgressBar的布局:<ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/progressbar" android:layout_centerInParent="true" android:visibility="visible"
/>三、基本控件启动模拟器,运行结果如图3.5所示:
图3.5三、基本控件
将android:visibility=“visible”改为android:visibility=“invisible”时,进度条将被隐藏不会再显示,如图3.6所示:
图3.6三、基本控件
3.2.6AlertDialog
AlertDialog控件可以在当前的界面弹出一个对话框,且这个对话框将置顶于所有界面元素之上,能够屏蔽掉其他控件的交互能力,所以AlertDialog一般用于提示一些重要的内容或者警告。属
性说
明setTitle()设置对话框的标题setMessage()设置对话框的内容setPositiveButton()设置对话框的确定点击事件setNegativeButton()设置对话框的取消点击事件show()设置对话框的取消点击事件表3.4AlertDialog控件属性三、基本控件在按钮点击的代码里添加对话框:publicclassMainActivityextendsActivity{ //定义按钮组件 privateButtonbutton1; privateButtonbutton2; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
//得到Button的实例Buttonbutton1=(Button)this.findViewById(R.id.btnLogin);Buttonbutton2=(Button)this.findViewById(R.id.btnCancel);
}三、基本控件publicvoidonClick(Viewview){ //用switch语句 switch(view.getId()){ caseR.id.btnLogin://注册按钮 //提示信息
Toast.makeText(getApplicationContext(),"登录成功",1).show(); showDialog(); break;
三、基本控件 caseR.id.btnCancel://取消按钮 //提示信息 Toast.makeText(getApplicationContext(),"取消",1).show(); break; default: break; }}三、基本控件 privatevoidshowDialog(){ //TODOAuto-generatedmethodstub AlertDialog.Builderdialog=newBuilder(this); dialog.setTitle("提示信息"); dialog.setMessage("你确定要登录吗"); dialog.setPositiveButton("确定",new DialogInterface.OnClickListener(){ @Override publicvoidonClick(DialogInterfacedialog,intwhich){ //TODOAuto-generatedmethodstub } });三、基本控件 dialog.setNegativeButton("取消",newDialogInterface.OnClickListener(){ @Override publicvoidonClick(DialogInterfacedialog,intwhich){ //TODOAuto-generatedmethodstub } }); dialog.show();//显示
}}三、基本控件启动模拟器,运行结果如图3.7所示:图3.7三、基本控件
3.2.7ProgressDialog
ProgressDialog和AlertDialog类似,都可以在界面上弹出一个对话框,都能够屏蔽掉其他控件的交互能力。不同的是,ProgressDialog会在对话框中显示一个进度条。三、基本控件将上一节对话框的代码改为:privatevoidshowDialog(){ //TODOAuto-generatedmethodstub ProgressDialogpd=newProgressDialog(this); pd.setTitle("thisisProgressDialog"); pd.setMessage("Loading....."); pd.setCancelable(true); pd.show();//显示}三、基本控件
上述代码中先构建出一个ProgressDialog的对象,然后设置标题、内容、是否取消等属性,最后通过show()方法将其显示出来,运行结果如图3.8所示:图3.8目录4.1SQLiteDatabase简介4.2SQLiteOpenHelper简介4.3SQLite数据库的应用
四、SQLite数据库四、SQLite数据库
Android可以使用SQLiteDatabase来代表一个数据库。可以通过SQLiteDatabase来创建、删除、执行SQL命令,并执行其他常见的数据库管理任务。SQLiteDatabase提供了openOrCreateDatabase等静态方法来打开或者创建数据库。它会自动检测相应的数据库是否存在,如果不存在,则自动创建相应的数据库。4.1SQLiteDatabase简介四、SQLite数据库
一些SQLiteDatabase常用操作的方法:publiclonginsert(Stringtable,StringnullColumnHack,ContentValuesvalues):将行插入到数据库的简便方法。publicintupdate(Strin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 空姐礼仪培训内容
- 海伦南区测量工程施工方案(H伦soho)
- 潜水泵安装培训课件
- 2026四川省国投资产托管有限责任公司招聘1人备考题库含答案详解(夺分金卷)
- 2026上海复旦大学高分子科学系招聘专任副研究员1人备考题库附答案详解(突破训练)
- 2026年安徽省合肥市外企德科安徽派驻蜀山区公立幼儿园多名工勤岗位招聘备考题库带答案详解(基础题)
- 2026上半年贵州事业单位联考铜仁市碧江区招聘40人备考题库带答案详解(培优)
- 2026上海市公共卫生临床中心人员招聘50人备考题库含答案详解(研优卷)
- 物业自查自纠报告及整改措施
- 2025-2026福建福州市马尾区教育局研究生专场招聘12人备考题库附答案详解
- DB21-T 4279-2025 黑果腺肋花楸农业气象服务技术规程
- 2026广东广州市海珠区住房和建设局招聘雇员7人考试参考试题及答案解析
- 2026新疆伊犁州新源县总工会面向社会招聘工会社会工作者3人考试备考题库及答案解析
- 广东省汕头市2025-2026学年高三上学期期末语文试题(含答案)(含解析)
- 110接处警课件培训
- DB15∕T 385-2025 行业用水定额
- 2025四川数据集团有限公司第四批员工招聘5人参考题库含答案解析(夺冠)
- 火箭军教学课件
- 新媒体运营专员笔试考试题集含答案
- 护理不良事件之血标本采集错误分析与防控
- 数字孪生技术服务协议2025
评论
0/150
提交评论