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
Activity & Layout
- Activity: core android class which is responsible for drawing an app user interface & receiving input events
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
- Gradle file in MyProject:
- 主要是外部依赖,是针对整个工程的,例如第三方插件
- Gradle file in MyProject/app:
- 负责于怎么set 这个app module
- 包含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