该笔记基于《第一行代码Android》(第三版),代码在Android Studio (Bumblebee 2021.1.1 Patch3)上运行。
安卓App目录下常用内容
名称 | 属性 |
AndroidTest | 编写AndroidTest测试用例,可对项目进行自动化测试 |
Java | 放置Java/Kotlin代码(自动生成MainActivity) |
res | 资源目录(drawable - 图片;layout - 布局;values - 字符,mipmap - 图标) |
AndroidManifest.xml | 配置文件,可以给程序添加权限声明 |
test | 编写Unit Test测试用例 |
.gitignore | 用于将app模块内指定的目录或文件排除在版本控制外 |
build.gradle | app模块的gradle构建脚本,指定多项目构建相关的配置 |
proguard-rules.pro | 用于制定项目代码的混淆 |
日志工具Log(android.util.Log)
名称 | 属性 |
Log.v() | 打印最为琐碎,意义最小的日志信息。对应级别verbose, 是Android中级别最低的一种。 |
Log.d() | 打印一些调试信息(对调试程序和分析问题有益)。对应级别为debug,高于verbose。 |
Log.i() | 打印较为重要的数据(如可以帮助分析用户行为的数据)。对应级别info,高于debug。 |
Log.w() | 打印警告信息,提示程序可能会有的潜在风险。对应warn,高于info。 |
Log.e() | 打印程序中的错误信息,如程序进入了catch语句。对应级别为error。 |
class MainActivity: AppCompatActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.d("MainActivity","onCreate execute")
//Log.d("tag:用于对打印信息进行过滤","msg:想要打印的内容")
}
}
变量
关键字 | 含义 |
val(value) | 声明不可变的变量 |
var(varialbe) | 声明可变的变量 |
P.S. 优先使用val来声明变量,当val无法满足需求时使用var
函数
/*基本写法
fun function(value1: value1_type,value2: value2_type):type{
return return_value
}*/
//e.g.
fun largerNumber(num1:Int, num2:Int):Int{
return max(num1,num2)
}
/*单行函数时
fun function(value1: value1_type,value2: value2_type):Type = return_value*/
//e.g.
fun largerNumber2(num1:Int,num2:Int,num3:Int): Int = max(max(num1,num2),num3)
条件语句(If,When)
If:
//写法1
fun largerNumber(num1:Int, num2:Int):Int{
var value = 0
if (num1 >num2) {
value = num1
} else {
value = num2
}
return value
}
//写法2
fun largerNumber(num1:Int, num2:Int):Int{
val value = if (num1 >num2) {
num1
} else {
num2
}
return value
}
//写法3
fun largerNumber(num1:Int, num2:Int):Int{
return if(num1 > num2) {
num1
} else {
num2
}
}
//写法4
fun largerNumber(num1:Int, num2:Int) = if (num1>num2){
num1
} else {
num2
}
//写法5
fun largerNumber(num1:Int,num2:Int) = if(num1 >num2) num1 else num2
When:
//精确匹配
//带参数
fun getScore(name:String) = when (name) {
//匹配值 -> {执行逻辑}
"Tom" -> 86
"Jim" -> 77
"Jack" -> 99
else -> 0
}
//不带参数
fun getScore(name:String) = when {
name == "Tom" -> 86
name =="Jim" -> 77
name =="Jack" -> 99
else -> 0
}
//以特定内容开头的均为某一值
fun getScore(name:String) = when{
name.startsWith( "Tom") -> 86
name =="Jim" -> 77
name =="Jack" -> 99
else -> 0
}
//类型匹配
fun getScore(number:Number) {
when(number) {
is Int -> println("number is Int")
is Double -> println("number is double")
else -> println("not support")
}
}
循环 (区间,While)
区间
升序
//闭区间 var range = 0..10
fun main() {
for(i in 1 until 10 step 2){
println(i)
}
}
//左闭又开 var range 0 until 10
fun main() {
for(i in 1 until 10){
println(i)
}
}
//设置间隔
fun main() {
for(i in 1 until 10 step 2){
println(i)
}
}
降序
fun main() {
for(i in 10 downTo 1){
println(i)
}
}
While
fun main() {
var i = 0
while (i < 10) {
println(i)
i = i + 1
}
}
面向对象
//Person.kt
class Person {
var name=""
var age = 0
fun eat(){
println(name + " is eating. He is " + age + "years old.")
}
}
//Main.kt
fun main() {
val p = Person()
p.name = "Jack"
p.age = 19
p.eat()
}
继承
//Person.kt
open class Person (val name: String, val age: Int) {
fun eat(){
println(name + " is eating. He is " + age + "years old.")
}
}
//Student.kt
class Student(val sno:String, val grade:Int,name:String,age:Int):
Person(name,age) {
init {
println("Sno is " + sno)
println("grade is " + grade)
}
}
//Main.kt
fun main() {
val student = Student("a123",5,"Jack",19)
println(student.eat())
}