Activity 知识点总结


Activity

Activity介绍:包含用户界面的组件,主要用于和用户进行交互。

基本用法

使用Android Studio创建手动Activity

1.创建一个新的项目,选择No activity

2.在项目工程结构下面,在java的包路径下,new一个空的Activity

3.取消默认的勾选

4.创建完成

创建加载布局

1.创建布局文件,

创建出来的文件如下:

2.将布局方式修改成为线性布局 LinearLayout,下图表示了对各种元素的详细解释

3.创建完布局文件之后,就需要加载布局文件了

在AndroidMainfest.xml中注册

由于所有的Activty都要在AndroidMainfest.xml进行注册才能生效。我们查看AndroidMainfest.xml文件得知。

到了这里,我们需要为程序指明那个Activity是主Activity,这样程序才能跑起来,点进去查看

注意:当我们Activity没有指定主Activity的时候,程序仍然能被安装,只不过无法启动。一般这种方式被作为第三方服务提供给其他应用在内部调用的。
运行起来

注意:
Android studio会默认帮我们吧Activity注册到AndroidMainfest.xml里面,但是我们需要将 android:exported 改为true

在Activity中使用Toast

下图解释:

当我们布局文件中有多个按钮的时候,我们可以引入第三方开源库,来代替findViewById的调用。我们这里使用Kotlin的扩展包

使用后的效果:

在Activity中使用Menu

Menu出现的场景,手机的空间有限,如果有大量的菜单显示,就不太好展示,所以出现了Menu
1.首先我们创建一个menu的xml文件,

2.在文件中编写代码

3.在Activity中编写代码,
首先重写onCreateOptionsmenu()方法,这是将样式加载到Activity里面

重写onOptionsItemSelected()

销毁一Activity

1.通过back就相当于销毁一个Activity
2.在代码使用 finish() 销毁
finish()

Intent

Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件。
通俗来讲:Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想执行的动作,还可以在不同组件之间传递数据。Intent一般可以用于启动Activity,启动Service,以及发送广播等场景。Intent可以分为显示Intent和隐式Intent

显示Intent

我们再创建一个TwoActivity,在这次创建的时候,不需要勾选LauncherActivity,Android Stuido会自动为我们生成activity_two.xml文件,我们再activity_two中编代码:添加一个按钮

Intent说明:Intent有多个构造函数,其中一个是Intent(Context packageContext,Class<?> cls)
第一个是参数:要求提供一个启动ACtivity的上下文, 第二个参数是:Class用于指定想要启动的目标Activity,通过这个构造函数可以构建出来Intent
Activity 中提供了一个startActivity方法,用于启动另一个Activity,但是我们不知道启动那个Activity,这里这个方法传入Intent,由于Intent的指定,所以我们可以通过startActivity启动目标Activity

我们再OneActivity中编写如下代码:

这样的话我们就可以启动了TWoActivity了,我们使用这种方式来启动Activity,Intent的意图非常明显,所以称为显示Activity


隐示Intent

隐式Intent相比显示Intent含蓄了很多,不明确指定哪一个Activity,而是指定了一系列更为抽象的action,category等信息,然后交给系统分析Intent,并帮我们找到合适的Activity去启动。

合适的Activity:简单来讲就是可以响应隐式Intent的Activity,
我们来编写代码:
action,category等信息是在AndroidMain.xml中匹配的,我们要启动哪一个Activity,就用action,category来标识哪一个Activity,
说明:1.只有action,和categor中的内容同时匹配Intent中指定的内容的时候,这个Activity才能响应Intent
2.每个Intent中只能指定一个action,但是能够指定多个category, 但是一个activity可以配置多个action,和多个category。
首先在AndroidMainfest.xml中对应的activity中编写代码

在OneActivty中编写代码:

更多隐式Intent的用法

Intent不仅可以启动自己的程序,还可以启动其他程序的Activity,这样就使多个应用程序之间的功能共享成为了可能。
1.打开百度网页

2.响应多个Activity
我们在标签中配置一个标签,用于更精确地指定当前Activity能够响应的数据。data标签主要有以下内容
android:scheme :用于指定数据的协议部分,如上例中的HTTPS部分
android:host :用于指定数据的主机部分,如上例中的www.baidu.com部门
android:port : 用于指定数据的端口部分,一般紧随在主机名之后
android:path 用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容
android:mimeType 用于指定可以处理的数据类型,允许用通配符方式进行指定
只有data标签中指定的内容和Intent中携带的Data完全一致时,当前Activity才能够响应该Intent.

我们在代码中体现一下再创建一个ThreeActivty里面添加一个ID为Button3的按钮,这里就不做展示了。
其次在AndroidMainfest.xml中修改Activity代码:

运行结果如下图:

3. 调用拨号
出了HTTPS协议之外,我们还可以指定其他许多协议,比如说geo,tel表示拨打电话

程序运行结果:

向下一个Activty传递数据

首先编写当前的Activity的代码:

编写下一个接受数据的Activity的代码:

返回个上一个Activity

我返回上一个Activity,只需要按一下Back键就可以了,这样的话不会将当前的Activity数据保存下来,会直接销毁。
其实Activity中有一个用于启动Activity的startActivityForResult(),它期望在Activity销毁的时候返回一个结果给上一个Activity,这就是我们所需要的。
接受数据的Activity:

当前Activity:

由于我们使用startActivityForResult()方法来启动TwoACtivity,在TwoActivity销毁之后会回调上一个Activity的OnActivityResult方法,所以
需要在上一个Activity中重写onActivityResult()方法,因此我们需要在OneActivity中重写这个方法得到返回的数据。

由于在一个Activity返回的数据都会回调到onActivityResult()这个方法中,因此我们首先要通过检查requestCode的值来判断数据源,确定数据源是从TwoActivity返回之后,需要判断resultCode的值来判断处理结果是否成功,最后才从data中取值并打印出来,这样就完成了一个向上Activity返回数据的工作。

如果通过 back返回,我们可以和重写onBackPressed,代码逻辑类似