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
我们在
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,代码逻辑类似