Activity是Android应用的重要组成单元之一,也是Android应用最常见的组件之一。前面看到的示例通常都只包含一个Activity或一个AppCompatActivity,但在实际应用中这是不大可能的,往往都会包括多个Activity,不同的Activity 向用户呈现不同的操作界面。从本期开始将针对Activity的相关知识进行详细的学习。

一、Activity简介

Activity是Android组件中最基本也是最常用的一种组件,在一个Android应用中,一个Activity通常就是一个单独的屏幕。每一个Activity都被实现为一个独立的类,并且继承于Activity这个基类。

当然,在不同应用场景下,有时也要求继承Activity的子类。如果应用程序界面只包括列表,则可以让应用程序继承ListActivity;如果应用程序界面需要实现标签页效果,则可以让应用程序继承TabActivity。

Android中提供的Activity类,与其子类的类图如下图所示。

从上图可以看到,Activity类间接或直接地继承了 Context、ContextWrapper、 ContextThemeWrapper等基类,因此Activity及其子类都可以直接调用它们的方法。其子类的作用分别为:

  • AccountAuthenticatorActivity:帐号身份验证Activity,即一个用于实现账户身份验证的Activity。

  • TabActivity:实现Tab界面的Activity,在上一期已经学习了解过。

  • AliasActivity:存根Activity,根据组件自己Manifest文件中的meta-data的信息启动另一个指定的Activity,并且Finish自身。

  • ExpandableListActivity:实现可展开列表界面的Activity。

  • ListActivity:含有一个ListView组件的Activity,在之前也已经学过。

  • LauncherActivity:实现一个列表界面的Activity,当单机列表项时,所对应的Activity被启动。

  • PreferenceActivity:实现一个程序参数设置、存储功能的Activity。

  • FragmentActivity:用来解决Android 3.0 之前没有Fragment的接口,方便在Activity中就能嵌入Fragment来实现你想要的布局效果。

有的同学也发现了,我们在前面的学习大部分都是接触的AppCompatActivity,其和Activity又有什么关系呢?

使用Eclipse开发Android应用的时候,当创建项目时,MainActivity自动继承Activity,而使用Android Studio开发Android应用时,创建项目时自动继承AppCompatActivity。当然我们可以将AppCompatActivity修改为Activity,会发现运行程序后界面有一定的区别,分别如下图两种效果所示。

从上面的运行效果图可以看到,继承AppCompatActivity时,在界面最上面会出现一个ActionBar,默认显示为该程序名称;继承Activity时,发现顶部的ActionBar不见了。这是在界面直观上的差别,关于ActionBar的内容会在后续内容中进行学习,此处不做过多介绍。对于学习Activity相关知识来说,AppCompatActivity与Activity差异不大。

在应用程序中,Activity就像一个界面管理员,用户在界面上的操作是通过Activity来管理。

二、Activity创建和配置

在前面的学习中基本都已经创建过很多Activity界面,非常简单,一般创建Activity的步骤总结如下:

  1. 定义一个类继承自 android.app.Activity或者其子类。

  2. 在res/layout目录中创建一个xml文件,用于创建 Activity的布局。

  3. 在 AndroidManifest.xml 文件中注册所创建的 Activity。

  4. 重写 Activity的 onCreate()方法,并在该方法中使用 setContentView()加载指定的布局文件。

需要注意的是setContentView()方法既可以接收View对象为参数,也可以接收布局文件对应的资源id为参数。

为了大家能够很好的学习如何创建Activity,接下来依次演示一遍。

同之前创建WidgetSample工程一样,先创建一个Android工程,取名为ActivitySample,后续操作步骤同之前一样,这里不再重复,如果不清楚可以回看“开发IDE大升级,终于迎来了Android Studio”。

1、创建Activity类

右击MainActivity所在的包名,依次选择New→Java Class,如下图所示。

上步操作会弹出Create New Class窗口,然后在该窗中的Name文本框中输人名称MyActivity,并设置Superclass为android.support.v7.app.AppCompatActivity,如下图所示。点击“OK”按钮,即可完成Activity类的创建。

当然这里创建的Activity为空,里面没有任何内容。

2、创建Activity对应的布局

接着在res/layout目录中创建一个xml文件,右击layout文件夹,依次选择New→Layout resource File,如下图所示。

上步操作会弹出New Resource File窗口,在File name中输入布局文件名称my_layout,如下图所示。点击“OK”按钮,即可完成布局资源文件的创建。

接下来在my_layout.xml文件中添加一个TextView组件,代码如下:

3、注册 Activity

Android 应用要求所有应用程序组件(Activity、Service、ContentProvider、BroadcastReceiver)都必须在AndroidManifest.xml文件中<application.../>元素里面进行配置。

对MyActivity进行注册,具体代码如下:

如果要把MyActivity设置为应用程序默认启动的界面,需要在<activity>节点中配置 <intent-filter>节点。

该节点中的<action android:name="android.intent.action.MAIN”/>表示将当前Activity设置为程序最先启动的Activity。

<category android:name="android.intent.category. LAUNCHER" />表示让当前Activity在桌面上创建图标。

4、重写onCreate()方法

接下来在MyActivity中重写onCreate()方法,并设置要加载的布局文件,具体代码如下:

经过上面几步操作,MyActivity的创建和配置基本完成,接下来就可以运行程序了,可以看到下图所示效果。

从上图可以看出,应用一启动就显示MyActivity界面,说明MyActivity在AndroidManifest清单文件中配置生效并创建成功。

当然我们并不是将程序所用到的所有Activity都如同上述一样作为应用启动的界面,毕竟在实际开发中一个Android程序启动时只会启动用一个Activity作为启动页面,那这时候对于Activity的配置会有一些差异。如果将上述Android工程的MainActivity作为启动的界面,MyActivity作为其他界面,则MyActivity的配置代码如下:

这样配置后,MyActivity的启动方式就有所不同,具体会在下一节进行学习。

5、快速创建

Android Studio开发工具非常便捷,其实上面创建MyActivity的几个步骤已经被封装好了,只需要几个简单操作即可完成。

右击MainActivity所在的包名,依次选择New→Activity→Empty Activity,如下图所示。

在弹出的New Android Activity对话框中输入相应配置,如下图所示,点击Finish按钮完成Activity的创建。

是不是已经发现了,经过上述几个步骤后,Android Studio直接完成了创建Activity所需要的几个步骤,非常方便,这也是开发者会经常使用到的方法。然后再去修改我们需要的代码即可。

今天就先到这里,如果有问题欢迎留言一起探讨,也欢迎加入Android零基础入门技术讨论微信群,共同成长!

此文章版权为微信公众号分享达人秀(ShareExpert)——鑫鱻所有,若需转载请联系作者授权,特此声明!

往期总结分享:

Android零基础入门第1节:Android的前世今生

Android零基础入门第2节:Android 系统架构和应用组件那些事

Android零基础入门第3节:带你一起来聊一聊Android开发环境

Android零基础入门第4节:正确安装和配置JDK, 高富帅养成第一招

Android零基础入门第5节:善用ADT Bundle, 轻松邂逅女神

Android零基础入门第6节:配置优化SDK Manager, 正式约会女神

Android零基础入门第7节:搞定Android模拟器,开启甜蜜之旅

Android零基础入门第8节:HelloWorld,我的第一趟旅程出发点

Android零基础入门第9节:Android应用实战,不懂代码也可以开发

Android零基础入门第10节:开发IDE大升级,终于迎来了Android Studio

Android零基础入门第11节:简单几步带你飞,运行Android Studio工程

Android零基础入门第12节:熟悉Android Studio界面,开始装逼卖萌

Android零基础入门第13节:Android Studio个性化配置,打造开发利器

Android零基础入门第14节:使用高速Genymotion,跨入火箭时代

Android零基础入门第15节:掌握Android Studio项目结构,扬帆起航

Android零基础入门第16节:Android用户界面开发概述

Android零基础入门第17节:文本框TextView

Android零基础入门第18节:输入框EditText

Android零基础入门第19节:按钮Button

Android零基础入门第20节:复选框CheckBox和单选按钮RadioButton

Android零基础入门第21节:开关组件ToggleButton和Switch

Android零基础入门第22节:图像视图ImageView

Android零基础入门第23节:图像按钮ImageButton和缩放按钮ZoomButton

Android零基础入门第24节:自定义View简单使用,打造属于你的控件

Android零基础入门第25节:简单且最常用的LinearLayout线性布局

Android零基础入门第26节:两种对齐方式,layout_gravity和gravity大不同

Android零基础入门第27节:正确使用padding和margin

Android零基础入门第28节:轻松掌握RelativeLayout相对布局

Android零基础入门第29节:善用TableLayout表格布局

Android零基础入门第30节:两分钟掌握FrameLayout帧布局

Android零基础入门第31节:少用的AbsoluteLayout绝对布局

Android零基础入门第32节:新推出的GridLayout网格布局

Android零基础入门第33节:Android事件处理概述

Android零基础入门第34节:Android中基于监听的事件处理

Android零基础入门第35节:Android中基于回调的事件处理

Android零基础入门第36节:Android系统事件的处理

Android零基础入门第37节:初识ListView

Android零基础入门第38节:初识Adapter

Android零基础入门第39节:ListActivity和自定义列表项

Android零基础入门第40节:自定义ArrayAdapter

Android零基础入门第41节:使用SimpleAdapter

Android零基础入门第42节:自定义BaseAdapter

Android零基础入门第43节:ListView优化和列表首尾使用

Android零基础入门第44节:ListView数据动态更新

Android零基础入门第45节:网格视图GridView

Android零基础入门第46节:列表选项框Spinner

Android零基础入门第47节:自动完成文本框AutoCompleteTextView

Android零基础入门第48节:可折叠列表ExpandableListView

Android零基础入门第49节:AdapterViewFlipper图片轮播

Android零基础入门第50节:StackView卡片堆叠

Android零基础入门第51节:进度条ProgressBar

Android零基础入门第52节:自定义ProgressBar炫酷进度条

Android零基础入门第53节:拖动条SeekBar和星级评分条RatingBar

Android零基础入门第54节:视图切换组件ViewSwitcher

Android零基础入门第55节:ImageSwitcher和TextSwitcher

Android零基础入门第56节:翻转视图ViewFlipper

Android零基础入门第57节:DatePicker和TimePicker选择器

Android零基础入门第58节:数值选择器NumberPicker

Android零基础入门第59节:常用三大Clock时钟组件

Android零基础入门第60节:日历视图CalendarView和定时器Chronometer

Android零基础入门第61节:滚动视图ScrollView

Android零基础入门第62节:搜索框组件SearchView

Android零基础入门第63节:值得借鉴学习的选项卡TabHost

Android零基础入门第64节:揭开RecyclerView庐山真面目

Android零基础入门第65节:RecyclerView分割线开发技巧

Android零基础入门第66节:RecyclerView点击事件处理

Android零基础入门第67节:RecyclerView数据动态更新

Android零基础入门第68节:RecyclerView添加首尾视图

Android零基础入门第69节:ViewPager快速实现引导页

Android零基础入门第70节:ViewPager打造TabHost效果

Android零基础入门第71节:CardView简单实现卡片式布局

Android零基础入门第72节:SwipeRefreshLayout下拉刷新

最新文章

  1. 怎么学JavaScript?
  2. Asp.net中使用Server.HtmlDecode(string str)的使用
  3. 在 docker中 运行 mono /jexus server 并部署asp.net mvc站点
  4. 异步编程 z
  5. hdu 4602 Partition
  6. python PIL下的各种问题
  7. 关于Mysql Can&#39;t connect to mysql server on localhost(10061)的问题解决
  8. 【USACO 1.2.4】回文平方数
  9. shopncv4 短信接口 提供商 中国短信网
  10. FusionWidgets Cylinder图
  11. PHP开发程序员的学习路线
  12. gcc编译器的工作流程
  13. 记录一些移动端H5,小程序视觉还原问题及方法
  14. idea maven环境下 java实现发送邮件验证
  15. alias 别名
  16. appium+python自动化59-appium命令行参数
  17. 784. Letter Case Permutation 字符串中字母的大小写组合
  18. Farm Irrigation ZOJ 2412(DFS连通图)
  19. Python入门 —— 02基础语法
  20. 关于配置tomcat多版本同eclipse的配置问题

热门文章

  1. 要求两个异步任务都完成后, 才能回到主线程:dispatch_group_t
  2. Oracle数据库的基本概念(转)
  3. sqlserver中的存储过程 函数 事物 索引及视图
  4. 【codeforces 791D】 Bear and Tree Jumps
  5. QT5.8.0+MSVC2015安装以及环境配置(不需要安装VS2015)
  6. yii2.0复选框默认选中
  7. VSCode 小鸡汤 第00期 —— 安装和入门
  8. 【转】mybatis 一对一与一对多collection和association的使用
  9. 各个 C# 版本的主要特性、发布日期和发布方式(C# 1.0 - 7.3)
  10. android Bluetooth程序设计