Appearance & Behavior
下面的System Settings
,然后把Reopen last project on startup
勾选掉。
我们看一下右侧的项目目录,可以看到除了gradle的配置文件外,有一个app的目录。这个app目录叫一个module,一个项目可以包含多个module,我们现在目前是一个。(本教程不会涉及到多module的使用,读者可以自行百度。)
下面展开app目录,这里一共有三个文件夹,manifests、java、res,分别代表着配置文件、源码、资源文件。
下面,开始分别讲解每个文件夹的作用和功能。
程序的入口:AndroidManifest.xml分析
首先,我们打开manifests文件夹,这里只有一个AndroidManifest.xml。
我们可以看到最外层是一个manifest标签,里面显示了包名是“com.example.kalen.helloactivity”。在manifest标签里面是一个application标签,也就是我们的Android应用,这里有一些属性,如icon、label,都是设置应用配置的。形如@xxx/xxx
的都是从res文件夹下面读取的。比如说,我们要改应用的名称,可以打开res下的values文件夹的strings.xml,然后修改app_name的名字。
再运行应用安装到模拟器的时候,可以看到安装的app的名字就改变了。
当然,也可以通过替换mipmap下的ic_launcher和ic_launcher_round来修改图标,不过和修改字符串不同,我们可以直接在电脑上打开HelloActivity\app\src\main\res
目录,可以看到有很多个以mipmap开头的目录,后面的代表不同的尺寸。我们需要设计多个尺寸的图标以适配不同像素的手机。
另外,我们也可以改变应用的主题(style/AppTheme),打开res下面的values里的styles.xml。
@color/colorPrimary
@color/colorPrimaryDark
@color/colorAccent
可以看到这里设置了三种颜色。我们可以修改colors.xml的colorPrimary、colorPrimaryDark、colorAccent改变这几种颜色。比如我们可以把colorPrimary设置为#000000(黑色)。
再运行app,app顶部的一栏就变成了黑色。
看完了application标签的几个属性,我们来看看它的子标签:activity。这里首先有一个name是“.MainActivity”,这是一个相对的路径(相对于manifest标签下的package:“com.example.kalen.helloactivity”)。这个activity标签指向的是:com.example.kalen.helloactivity.MainActivity
。
另外,在activity下面有一个intent-filter标签。intent-filter里面有一个action和category,name属性一个是“android.intent.action.MAIN”还有一个是“android.intent.category.LAUNCHER”,通过名字可以看出,这个其实就是标示启动哪个activity的,这样的标签一个应用只能有一个,MainActivity就是我们程序的入口。
MainActivity.java分析
下面看看代码,打开MainActivity.java文件。发现MainActivity.java内只有一个方法:onCreate。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
在onCreate方法里面,除了调用父类的方法,也只有一行代码,setContentView,翻译过来就是设置内容视图,也就是显示什么内容。
那么R.layout.activity_main是什么?可以看到并没有import任何R文件。我们下面摁住ctrl键,鼠标滑动到layout上面。
可以看到这里显示出了一个0x7f04001b,看起来像一个地址一样。下面,我们再次摁住ctrl键,然后点击activity_main,看看这个是什么东西。可以看到我们跳转到了res下的layout的activity_main.xml里面。
现在应该明白了,这个R文件其实就是和res的一个对应,把res的每个变量都生成一个地址。比如我们输入R.color可以看到colors.xml的三种颜色。
再来看看activity_main.xml,我们可以看到最外面有一个android.support.constraint.ConstraintLayout,是一种布局格式。里面有一个TextView,里面的text属性写着“Hello World”,和app上面的Hello World相对应。
第二个Activity
了解了Activity的布局,下面我们创建第二个Activity,并尝试以第二个Activity作为启动项。
右击com.example.kalen.helloactivity
,选择创建一个Java Class。
类的名字设置为SecondActivity,点击回车之后,就会生成一个空的类,下面让它继承AppCompatActivity,并重写onCreate方法。
package com.example.kalen.helloactivity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
public class SecondActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
接着我们在layout目录下创建一个Layout XML。
命名为activity_second,然后点击Finish。
这里选择创建的布局是LinearLayout,下一章会讲解。先复制下面代码,在LinearLayout里面添加一个TextView用来显示一段文字。
接着,就可以在onCreate方法中添加setContentView(R.layout.activity_second);
了。
最后,我们在AndroidManifest.xml里面注册SecondActivity,并把MainActivity的intent-filter添加到SecondActivity下面。
这时候,运行程序,就可以显示SecondActivity的内容了。