今天先创建第一个app,跟的课程是google推荐的Developing Android Apps with Kotlin https://classroom.udacity.com/courses/ud9012

由于上面这个课程都是视频,所以也跟着google的kotlin android training get started补充理论知识

1. Explore Android Studio

上一篇文章已经讲过了gradle在项目中的结构,除了gradle外,其它的代码文件的分布也和java的项目类似,主要说一下其它文件夹。

res/layout

android的布局文件夹,每一个Activity对应一个xml布局文件,在布局文件里面可以看到Activity的页面UI显示。

AndroidManifest.xml

一直以为是mainfest,结果是manifest(清单),列举了android系统运行app所需要的清单(Activity列表和权限)。

2. Anatomy(剖析) of Basic Android Project

下面就开始进行第一个app的开发,app叫dice roller(投色子),创建一个空项目后打开运行可以看到Hello World,就证明整个环境是通的。下面看代码。

MainActivity

首先看到的类是MainActivity,MainActivity就是Hello world这个页面的Activity。而页面的layout就是res/layout下的activity_main.xml,layout命名规则名称后置。对于Activity和layout中的xml的理解,和前端的html和js的关系类似,js处理交互逻辑,html显示页面UI,这里就是Activity处理交互逻辑,xml文件显示页面UI。

1
class MainActivity : AppCompatActivity() { ...

可以看到MainActicity继承自AppCompatActivity,AppCompatAcitvity是Activity的一个子类,兼容性和新特性都很好。

onCreate()

1
2
3
4
override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)
   setContentView(R.layout.activity_main)
}

Activity不用构造器去初始化对象,而是用生命周期函数,onCreate()就是一个生命周期函数,它是Activity生命周期中的开始。

setContentView()用来绑定当前Activity和layout的xml文件。R.layout.activity_main,这里绑定的layout xml文件使用了R class,R class包含了app在res下所有的静态资源,R.layout就相当于res下的layout文件夹。

activity_main.xml

下面来看一下layout的xml文件,前面已经解释过了xml文件的作用,下面就看一下代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout   
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

</LinearLayout>
  • 顶级的标签是 是android中比较常用的布局,顾名思义,线性布局,在水平或者垂直方向上一个接一个排列。点进去可以看到 LinearLayout 继承自 ViewGroup,可以包含其它多个views并且指定view的在屏幕上的定位。

  • 作用是展示text,*android:text=“Hello World!"*是展示的text。

layout xml文件和activity联动

按照教程上所说,添加一个button,具体按照教程走,主要是添加完button后,为