登录后台

页面导航

本文编写于 2400 天前,最后修改于 1667 天前,其中某些信息可能已经过时。

前言

话说上次没作业,这次就直接讲课。我们之前好像一直在用 AS 自动为我们创建的活动,这样糊里糊涂的可不行,今天我们就来探究下 AS 究竟默默的为我们做了什么?

创建一个新项目

我们在创建新项目时直接就可以运行是因为 AS 帮我们创建好了活动,为了理解原理我们这次关闭自动创建活动,来手动创建一个活动。打开 AS 创建一个新项目,Application name(应用名字) 填 IntentText,Company domain(公司网站)空着,Project location(项目文件存放地址) 选一个能找到的地方,Package name(包名) 填 com.intent.test,然后下一步

1526980287343

这里仍然默认,直接 Next 下一步:

这里注意了,要选「Add No Activity」,不自动添加 Activity。

1526981963764

然后点击「Finish」结束配置。将项目结构转换成「Project」,app/src/main/java/com.intent.test 应该是空的了:

而且 appsrcmainres 下应该也没有 layout 布局文件夹:

手动创建布局

项目创建好了,我们就先来创建布局吧,在 res 上右键,new~XML~Layout XML File

1526991322612

打开新建布局界面。第一行时输入布局文件的名字,默认是 layout;第二行是根布局,默认是 LinearLyout。这里就保持默认不变吧,直接点击 finish。

然后就会发现这个文件,

在里面随便加一个控件,比如 Button:

手动创建 Java 文件

布局准备好了,我们现在开始准备 Java 文件:

在 com.intent.text 上右键 new~Activity~Empty Activity,来创建一个 Java 文件:

弹出新建 Android Activity 的对话框,Generate Layout File 的意思是自动为活动创建布局,因为我们刚才已经手动创建了,所以不勾选。Launcher Activity 是把当前活动表示为主活动,由于我们是要探究,所以也不勾选。最后的 Backwards Compatibility 是用 AppCompat 来将项目向后兼容。直接点击 Finish,完成设置

然后就能看到创建好的 MianAvtivity:

1526993735564

默认是这样的:

在 Android 中,活动必须继承(extends) 自 Activity 或 AppCompatActivity,并且重写 onCreate() 方法,才能具有活动的特性,也才是一个活动。

TIPS:重写的意思是一个类继承自父类后,就具有了父类的所有方法和特性。如果子类继承自父类以后,想要修改父类的方法,只需要新建一个完全一样的方法(访问控制符,方法名,形参列表都相同),就可以把父类的方法覆盖掉。为了防止手抖打错了,需要在重写的方法前加「@Override」,如果没有重写成功(像返回值类型错了之类的),编译器会报错,来警告开发者

这里 AS 已经帮我们完成了这一步,现在我们要修改现有的代码来引入布局。在 onCreate 方法中加入一行代码:

setContentView(R.layout.layout);

其中 R 代表引用资源,第一个layout 代表 layout 文件夹,最后一个 layout 代表布局的 XML 文件的文件名。这样就完成了布局的。

TIPS:用 AIDE 的小伙伴注意了,AIDE 不支持直接创建活动,你只能手动完成。而且你在新建 Java 文件时会发现他说空白的!没有自动完成任何东西。你只能从已经创建好的项目里复制一份过来。

配置 AndroidManifest.xml

还记得之前讲的,任何活动都需要在 AndroidManifest.xml 中注册吗?现在就打开 AndroidManifest.xml 来看看:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.intent.test">

    <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"></activity>
    </application>

</manifest>

看到那个<activity>标签了吧,就是他。「android:name」用于指定是哪一个活动,这里的「.MainActivity」其实是「com.intent.test.MainActivity」的缩写,因为在最外层的「package」中已经定义了,所以这里就可以缩写。但是在某些特殊的情况下还是需要使用全称的,比如在使用一些别人的库的时候。当然现在我们这个程序是还不能运行的,因为我们还没有标识主活动和启动活动:加入如下代码:

<intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>

这些 AS 全程都是有代码补全的,但是 AIDE 的伙伴,,,你从已经创建好的源码里复制吧,没办法,我也是那么过来的。最后的效果如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.intent.test">

    <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>

</manifest>

现在我们来运行一下,效果如图:

我们就成功的手动创建一个活动了。

总结

今天的学习主要是为了明天的「Intent」的讲解打基础,那么今天的作业来了:新建一个活动,做一个搜索的界面,仅仅是界面即可。如下图所示:

在公众号后台回复「21素材」获取图标素材。祝大家学习进步!!!!

2020/5/24 注:
这是我 2018 年高中毕业的假期写的,当时并没有自己搭建博客,近期我给这一系列的文章都放到我自己的博客上。
当时写这个系列文章的想法就是扎实下基础,然后能帮到更多的人就更好了,但是大学开学之后就开始了新生活,没有大块的时间去编撰,系列文章也没有再更新过。但是我其实并不想放弃这个系列,那就,有缘再见吧,拜拜ヾ(•ω•`)o