当前位置:网站首页>从零开始学安卓(kotlin)一 ——入门
从零开始学安卓(kotlin)一 ——入门
2022-04-22 05:57:00 【散月】
参考书:第一行代码 Android
3.18 项目结构介绍
app 项目中的代码、资源等内容都是放置在这个目录下的,我们后面的开发工作也基本是在这个目录下进行的。
- libs 如果你的项目中使用到了第三方jar包,就需要把这些jar包都放在libs目录下,放在这个目录下的jar包会被自动添加到项目的构建路径里。
- java目录是放置我们所有Java代码的地方(Kotlin代码也放在这里),展开该 目录,你将看到系统帮我们自动生成了一个MainActivity文件。
- res 这个目录下的内容就有点多了。简单点说,就是你在项目中使用到的所有图片、布局、字 符串等资源都要存放在这个目录下。当然这个目录下还有很多子目录,图片放在drawable 目录下,布局放在layout目录下,字符串放在values目录下,所以你不用担心会把整个res 目录弄得乱糟糟的。
- AndroidManifest.xml
这是整个Android项目的配置文件,你在程序中定义的所有四大组件都需要在这个文件里注 册,另外还可以在这个文件中给应用程序添加权限声明。
Android- Manifest.xml文件
进行注册,没有在AndroidManifest.xml里注册的Activity是不能使用的
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
在布局文件中编写界面,然后在Activity中引入进来,布局文件都是定义在res/layout目录下的
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
} }
res目录:把所有图片都放在drawable-xxhdpi目录下就好了,因为这是最主流的设备分辨率目录。
- 所有 以“drawable”开头的目录都是用来放图片的
- 所有以“mipmap”开头的目录都是用来放应用图标的
- 所有以“values”开头的目录都是用来放字符串、样式、颜色等配置的
- 所有 以“layout”开头的目录都是用来放布局文件的。

在代码中通过R.string.app_name可以获得该字符串的引用。
在XML中通过@string/app_name可以获得该字符串的引用。
build.gradle中:dependencies闭包
这个闭包的功能非常强大,它可以指定当前项目所有的依赖关系。通常Android Studio项目一共有3 种依赖方式:本地依赖、库依赖和远程依赖。本地依赖可以对本地的jar包或目录添加依赖关系,库依赖可以对项目中的库模块添加依赖关系,远程依赖则可以对jcenter仓库上的开源项目 添加依赖关系。
3.19 日志工具
- Log.v()。用于打印那些最为琐碎的、意义最小的日志信息。对应级别verbose,是 Android日志里面级别最低的一种。
- Log.d()。用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的。 对应级别debug,比verbose高一级。
- Log.i()。用于打印一些比较重要的数据,这些数据应该是你非常想看到的、可以帮你分 析用户行为的数据。对应级别info,比debug高一级。
- Log.w()。用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修 复一下这些出现警告的地方。对应级别warn,比info高一级。
- Log.e()。用于打印程序中的错误信息,比如程序进入了catch语句中。当有错误信息打 印出来的时候,一般代表你的程序出现严重问题了,必须尽快修复。对应级别error,比 warn高一级。
//example
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,即想要打印的具体内容。
不使用println()的原因:日志开关不可控制、不能添加日志标签、日志没有级别区分…
3.20 kotlin 入门
类型声明
- val 常量
- var变量
val a: Int = 10
函数定义
fun main() {
val a = 10
println("a = " + a)
}
fun methodName(param1: Int, param2: Int): Int {
return 0
}
//一行代码
fun largerNumber(num1: Int, num2: Int) = if (num1 > num2) num1 else num2
//when
fun getScore(name: String) = when (name) {
"Tom" -> 86
"Jim" -> 77
"Jack" -> 95
"Lily" -> 100
else -> 0
}
//is关键字
fun checkNumber(num: Number) {
when (num) {
is Int -> println("number is Int")
is Double -> println("number is Double")
else -> println("number not support")
} }
范围val range = 0…10 闭区间[0,10]
for (i in 0..10) {
println(i)
}
for (i in 10 downTo 1) {
println(i)
}
初始化列表、集合、Map
//listof()构造不可变列表
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
for (fruit in list) {
println(fruit)
}
//mutableListof()构造可变列表
var list = mutableListOf("Apple", "Banana", "Orange", "Pear", "Grape")
list.add("Watermelon")
for (fruit in list) {
println(fruit)
}
//lambda
val maxLengthFruit = list.maxBy {
it.length }
//lambda
val newList = list.map {
it.toUpperCase() } //map函数的功能非常强大,它可以按照我们的需求对集合中的元素进行任意的映射转换,上面只 是一个简单的示例而已。除此之外,你还可以将水果名全部转换成小写,或者是只取单词的首 字母,甚至是转换成单词长度这样一个数字集合
//集合
val set = setOf("Apple", "Banana", "Orange", "Pear", "Grape")
//map
//方法1
val map = HashMap<String, Int>()
map["Apple"] = 1
map["Banana"] = 2
map["Orange"] = 3
map["Pear"] = 4
map["Grape"] = 5
//方法2
val map = mapOf("Apple" to 1, "Banana" to 2, "Orange" to 3, "Pear" to 4, "Grape" to 5)
//map遍历
for ((fruit, number) in map) {
println("fruit is " + fruit + ", number is " + number)
}
函数式API
//filter函数
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val newList = list.filter {
it.length <= 5 }
.map {
it.toUpperCase() }
//any,all函数
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val anyResult = list.any {
it.length <= 5 } //true
val allResult = list.all {
it.length <= 5 } //false
//给按钮注册点击事件
button.setOnClickListener {
}
可为空的类型
在类名的后面加上一个问号。比如,Int表 示不可为空的整型,而Int?就表示可为空的整型;String表示不可为空的字符串,而 String?就表示可为空的字符串。
//相当于做判断
fun doStudy(study: Study?) {
study?.readBooks()
study?.doHomework()
}
val c = a ?: b
//let
fun doStudy(study: Study?) {
study?.let {
stu ->
stu.readBooks()
stu.doHomework()
}
}
//改进
fun doStudy(study: Study?) {
study?.let {
it.readBooks()
it.doHomework()
}
}
字符串内嵌表达式
${},当表达式中仅有一个变量的时候,还可以将两边的大括号省略。
版权声明
本文为[散月]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_43480289/article/details/124183397
边栏推荐
- OLAP和OLTP的区别及所对应模型(基础知识)
- 小程序调用扫描二维码功能并跳转到二维码指定的路径
- API慢接口分析
- uglifyjs压缩JS
- Official announcement | skyline officially joined the official openstack module
- 知识点整理:es6
- The difference between hash mode and history mode
- COM in Wine(2)——基本代码分析
- MYSQL之高性能索引
- JS encodes and decodes the URL (the difference between the three methods)
猜你喜欢

指纹支付相关的细节处理

Pgbouncer最佳实践:系列一

开源数据库管理系统现在比商业产品更受欢迎

Kyushu cloud edge MEP was selected as a typical product in the report of China edge cloud research

将Chrome浏览器背景设置为护眼色(眼睛护航/darkReader插件)

Official announcement | skyline officially joined the official openstack module

Postgreshub中文资源网介绍

Mysql 根据某一列的值 循环添加序号

Async and await

js引擎的循环机制:同步,异步,事件循环
随机推荐
事务不生效之this调用
webService接口编写并发布与webService接口的调用(二)
OLAP和OLTP的区别及所对应模型(基础知识)
指纹支付相关的细节处理
数美2022数字风控峰会开启,五大看点提前曝光
PostgreSQL使用clickhousedb_fdw访问ClickHouse
The difference between hash mode and history mode
congratulations! China Mobile Smart Home Center was selected in the list of ICT industry in 2020
Openinfra live | Kyushu yunhuang Shuquan was elected track chair and brought wonderful theme sharing
Shumei technology was honored as the "top 100 scientific and technological innovation of private enterprises in Beijing"
Pgbouncer最佳实践:系列四
滚动条的多种样式
synchronized 关键字和volatile关键字的作用和区别
报错:In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column
Flink理论基础
webService接口编写并发布与webService接口的调用(一)
开源数据库管理系统现在比商业产品更受欢迎
Shumei technology was invited to participate in the content governance label seminar of ICT Institute
MySQL Cluster Index
There is a @ Kyushu cloud offer waiting for you