前言
话说上次没作业,这次就直接讲课。我们之前好像一直在用 AS 自动为我们创建的活动,这样糊里糊涂的可不行,今天我们就来探究下 AS 究竟默默的为我们做了什么?
创建一个新项目
我们在创建新项目时直接就可以运行是因为 AS 帮我们创建好了活动,为了理解原理我们这次关闭自动创建活动,来手动创建一个活动。打开 AS 创建一个新项目,Application name(应用名字) 填 IntentText,Company domain(公司网站)空着,Project location(项目文件存放地址) 选一个能找到的地方,Package name(包名) 填 com.intent.test,然后下一步
这里仍然默认,直接 Next 下一步:
这里注意了,要选「Add No Activity」,不自动添加 Activity。
然后点击「Finish」结束配置。将项目结构转换成「Project」,app/src/main/java/com.intent.test 应该是空的了:
而且 appsrcmainres 下应该也没有 layout 布局文件夹:
手动创建布局
项目创建好了,我们就先来创建布局吧,在 res 上右键,new~XML~Layout XML File
打开新建布局界面。第一行时输入布局文件的名字,默认是 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:
默认是这样的:
在 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