Android Activity综述
用户看得见摸的着的是手机屏幕。我们要在手机屏幕上显示文字图像等信息,并对用户的点击滑动等等操作作出不同的反应。
App中与用户交互的大任由Activity来承担。当用户手指点击手机屏幕时,Android系统检测到屏幕发生的事情,将这一事件分发对应的App处理。
这里要注意,activity接收到的是系统给的信息。系统会判断这些交互消息该给哪个app来处理。
或者换个说法
Activity 是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。
每个 Activity 都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上。
Activity怎么用
我们新建的工程中带有一个基础activity。把它改改就能用。
新建工程中,需要注意3个文件。
MainActivity.java
在src/main/java里,对应的包名目录下。activity_main.xml
在res/layout里。AndroidManifest.xml
在src/main里。这里叫做“清单文件”。下文会介绍。
这3个文件分布在不同的地方。简单来说,java文件可以控制界面逻辑。
layout文件(这里指的是activity_main.xml
)预设了UI如何摆放。
清单文件告诉系统,我这个app有哪些组件,申请了什么权限。
layout - 界面布局
新建的layout中,as一般会默认给一个ConstraintLayout
。比如activity_main.xml
。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!-- 省略默认的TextView -->
</androidx.constraintlayout.widget.ConstraintLayout>
这里为了用起来方便,我们把它换成LinearLayout。
有的朋友会问,都2021年了,为什么不直接用ConstraintLayout?
现在不做什么功能,先用LinearLayout,就是为了方便。
换成LinearLayout后,layout文件长这样。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!-- 省略默认的TextView -->
</LinearLayout>
可以看到,标签的开头和结尾都换成了LinearLayout
。其他地方暂时不修改。
as功能强大,非常便利。我们可以用鼠标选中标签开始的androidx...Layout
,然后直接键盘输入LinearLayout
的前几位字母。
as会自动弹出选择框,在里面双击选择LinearLayout
或者回车选择,标签就替换完成了。
Java - 控制界面
layout文件设计的是界面的初始布局。它决定了初始界面上放着什么UI组件以及组件是怎么组织安排的。
这里我们说的是「初始界面」或者「初始布局」。也就是说,我们可以控制界面上的UI元素。
先看默认的MainActivity.java
。在onCreate
方法里,R.layout.activity_main
指的就是activity_main.xml
。
现在layout中有一个TextView,它可以用来显示文字。我们想在MainActivity
中控制它,该怎么做呢?
现在改一下这个TextView。删掉原来ConstraintLayout用到的那些属性。
给它添加一个id。这个id在这个layout文件中必须是独一无二的。给它分配一个id叫做tv1
,就像下面。
<TextView
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
现在TextView有了「身份证」,我们在activity中就可以找到它。用的是findViewById
方法。
TextView tv1 = findViewById(R.id.tv1);
现在我们就拿到了界面上的这个TextView对象。可以对它进行操作了。
比如改变它显示的文字。
TextView tv1 = findViewById(R.id.tv1); // 拿到textView的对象
tv1.setText("Today is a good day."); // 改变文字
AndroidManifest.xml - 清单文件
也可以简称为「manifest文件」。清单文件非常重要,它告诉系统我们的app有哪些activity,用到了什么权限等等信息。
如果要新建activity,需要在清单中注册。
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
从这个默认的清单文件中我们可以得知,activity是属于application的。application就是我们的应用。
application标签中也指定了各种元素,例如应用的图标,名字,主题等等。
MainActivity是应用启动的第一个activity。可以观察到它设置了action和category属性。
android.intent.action.MAIN
决定应用程序最先启动的Activity。android.intent.category.LAUNCHER
表示可以在手机“桌面”上看到应用图标。
设置了这2个标签,决定了这个activity是用户点击应用图标时「第一个启动的界面」。
activity总览小结
至此,我们知道了一个activity通常需要一个java文件,一个layout文件,并且要在清单中注册。
与网页开发类比的话,layout文件就像html,Java和js有类似的作用。style(样式)可以起到css的作用。
activity是应用重要的组件之一。纷繁复杂的内容需要activity来承载。
之后我们会在activity中控制各种各样的UI组件,处理用户的操作,申请权限等等。还要了解activity的生命周期,启动方式和跳转方法。
代码请参考 Tutorial2020
- 点赞
- 收藏
- 关注作者
评论(0)