Overall Intro

292 阅读2分钟

Folder Intro

res folder: image, icon, color etc.

GeneratedJava folder:

  • 存放系统需要编译的文件
  • 不需要改动或者添加,每次rebuild 里面的内容都会被重写
  • debug的时候还是很Useful

manifest folder:

  • essential details: 系统needs to know 实际怎样运行app
  • find any permissions that you'll need in app

Gradle Scripts:

  • 创建的时候自动创建
  • 在运行时需要的依赖,eg: apk
  • bundle up your res folder

image.png

image.png


Activity & Layout

  • Activity: core android class which is responsible for drawing an app user interface & receiving input events

image.png

  • AppCompatActivity: 用来访问最底层的android并且会向下兼容老版本的系统
  • MainActivity: 一个程序的起点,就和其他语言的main函数一样
override fun onCreate(saveInstanceState: Bundle?) {
	super.onCreate(saveInstanceState)
	setContentView(R.layout.activity_main)
}
  • onCreate():总是会被重写, 用来具体描述那个layout被用来与activity 关联·
  • setContentView就是用来绑定视图的

Dice Roller Demo

  • use findViewById 来绑定元素 diceImage = findViewById(R.id.dice_image)
  • toast 产生点击提示
rollButton.setOnClickListener {
    Toast.makeText(this, "button clicked", Toast.LENGTH_SHORT).show()
}
  • when 判断条件,更换 imageView 的src

注意点:

  • 由于网络的原因有延迟,所以通常初始的时候会是loading状态,所以比较理想的是我们在刚开始设计的时候用dummy data来预览有图片的情况
  • 在没有运行的时候,预览可以看见tools这一行的dice_1的图片,但是在运行的时候会展示android这一行的空白图片
<ImageView
	...
	android: src="@drawable/empty_dice"
	tools: src="@drawable/dice_1"
/>

Gradle

  1. Gradle file in MyProject:
    1. 主要是外部依赖,是针对整个工程的,例如第三方插件
  2. Gradle file in MyProject/app:
    1. 负责于怎么set 这个app module
    2. 包含appId, minSdkVersion, targetSdkVersion
      • appId should be unique, google play上面只能是一个ID对应一个app
// build.gradle文件中添加(app level)
vectorDrawables.useSupportLibrary = true
// 在layout中将 <android: src=""> 替换为app:srcCompat
<android: .... />  //android这个namespace是指来自于core android framework的attributes
<app ... /> // app 这个namespace是attributes that来自于你自己的code或者library
<app:srcCompat="" /> //这个是一个可以兼容不同版本的vector drawable