Android 之 手动创建活动
•活动是什么
活动(Activity)是最容易吸引用户的地方,它是一种可以包含用户界面的组件;
主要用于和用户进行交互;
一个应用程序可以包含零个或多个活动。
接下来,我们来学习一下活动的基本用法。
•准备阶段
新建一个 Android 项目,命名为 ActivityTest,并选择 Add No Activuty。
点击 Finish,等待 Gradle 构建完成后,项目就创建成功了。
项目创建成功后,将项目结构改成 Project 模式。
•手动创建活动
点击 app/src/main/java ,找到 com.example.activitytest 包, 右击->New->Activity->Empty Activity ;
此时,会弹出一个创建活动的对话框,暂且将活动命名为 FirstActivity;
并且不要勾选 Generate a Layout File 和 Launcher Activity ;
- 勾选 Generate a Layout File 表示会自动为 FirstActivity 创建一个对应的布局文件
- 勾选 Launcher Activity 表示会自动将 FirstActivity 设置为当前项目的主活动
需要知道的是,项目中的任何活动都应该重写 onCreate() 方法;
打开你的 FirstActivity.java,你会发现,Android Studio 帮我们自动生成了;
FirstActivity.java
public class FirstActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } }可以看到, onCreate() 方法非常简单,就是调用了父类的 onCreate() 方法。
当然,这只是默认的实现,后面我们还需要在里面加入很多自己的逻辑。
•创建和加载布局
Android 程序的设计讲究逻辑和视图的分离,最好每一个活动都对应一个布局;
布局就是用来显示界面内容的;
接下来,我们手动创建一个布局文件;
点击 app/src/main ,找到 res 目录, 右击->New->Directory ;
会弹出一个新建目录的窗口,这里先创建一个名为 layout 的目录;
右击layout->New->Layout resource file;
此时会弹出一个新建布局资源文件的窗口,将其命名为 first_layout,根元素默认即可。
点击 OK 完成布局的创建;
上图是 Android Studio 为我们提供的可视化布局编辑器;
在窗口的右上角(①)有三个切换卡;
Design : 当前可视乎布局的编辑器
- 在这里你不仅可以预览当前的布局,还可以通过拖放的方式编辑布局
Code : 通过 .xml 文件编辑布局
Split : 两者都显示
左上角(②)也有不同的模式可以切换;
选择不同的选项对应不同的模式,具体自己点击体会;
•在活动中加载这个布局
来到 FirstActivity.java 下,在 onCreate() 方法中加入如下代码:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.first_layout);//给当前的活动加载一个布局 }java 代码中通过调用 s etContentView() 方法给当前活动加载一个布局,而在该方法中,一般传入一个布局文件的 id。
因为项目中添加的任何资源都会在 R 文件中生成一个相应的资源 id;
因此我们刚才创建的 first_layout.xml 布局的 id 已经添加到 R 文件中了;
所以通过 R.layout.first_layout 方式就可以获取创建的布局文件的 id。
•在AndroidManifest文件中注册
所有的活动都要在 AndroidManifest.xml 中进行注册才能生效。
打开 AndroidManifest.xml 文件:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.activitytest"> <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/Theme.ActivityTest"> <activity android:name=".FirstActivity"></activity> </application> </manifest>
lable : 为应用程序设置名称
icon : 为应用程序设置桌面图标
可以看到,Android Studio 已经为我们创建的活动自动注册了。
活动注册声明要放在 <application> 标签内,这里是通过 <activity> 标签来对活动进行注册的。
在 <activity> 标签中我们使用了 android:name 来指定具体注册哪一个活动,那么这里填入的 .FirstActivity 是什么意思呢?
其实这不过是 com.example.activitytest.FirstActivity 的缩写而已。
由于在最外面 <manifest> 标签中已经通过 package 属性制定了程序的包名是 com.example.activitytest ;
因此在注册活动时,这一部分给省略了。
不过,仅仅是这样注册了活动,我们的程序仍然是不能运行的;
因为还没有为程序配置主活动;
也就是说,当程序运行起来的时候,不知道要首先启动哪个活动。
•为程序配置主活动
需要在 <activity> 标签中加入以下语句:
<activity android:name=".FirstActivity" android:label="This is FirstActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity>这样的话,FirstActivity 就称为我们这个程序的主活动了;
即点击桌面应用程序图标时首先打开的就是这个活动;
除此之外,我们还可以通过使用 android:label 指定活动中标题栏的内容;
标题栏是显示在活动最顶部的;
需要注意的是,给主活动指定的 lable 不仅会成为标题栏中的内容,还会成为应用程序的名称;
也即是说,设置了内层的 lable,那么外层的 lable 就失去了作用;