首先推荐郭霖的《第一行代码》第三版(这是Kotlin版,关于Kotlin,当看到这篇文章,那请不要犹豫到底学不学Kotlin,因为工作后你自己会主动学),如果你跟我一样需要抓基础,那这是一个不错的选择,通过看书,我把自己之前学习Android疑惑的东西都写了出来,按照学习的顺序。 一.Project目录分析
首先我们在工作时要切换为项目的真实目录结构(就是将Android下拉为Project) 首先对于疑惑的目录进行讲解
- .gitignore 这个文件用来将指定的目录或文件排除在版本扩展之外。
- build.gradle 主要分为2个,app目录里的 build.gradle是app模块的gradle构建脚本,这个文件会指定很多项目构建相关的配置,另外一个是项目全局的gradle的构建脚本,通常这个文件不需要修改。
- proguard-rules.pro 这个文件用于指定项目代码的混淆规则,当打包成安装包文件后,如果不希望被破解,就会将代码混淆
- gradlew和gradlew.bat 用于执行gradle命令,gradlew是在Linux和Mac系统,后者是在Windows系统中使用
- local.properties 指定Android SDK路径,如果更改了位置就在这里修改
- settings.gradle 指定项目引入的模块
二.XMLl续讲 若要看其他的XML讲解,请看之前的文章XML讲解1 首先要理解下面的布局语句,就必须先理解清楚一个控件的父布局是什么,因为这样才能达到理想的布局效果 1.visibility 这是设置控件是否可见的属性 有三个可选参数 visible :可见而且占据位置 inviaible:不可见但占据位置 gone :不可见不占据位置
2.layout_alignParentLeft 贴紧父布局的左边缘 之后就举一反三
3.layout_above 让一个控件在另一个控件下方 类似的还有layout_bolow
4.layout_alignLeft 让一个控件左边缘和另一个控件左边缘对齐
注意这时就有一个很重要需要理解的点,当你没有设置当前控件与其他控件的位置绑定关系时,layout-marginLeft就是离父布局左方向的间距,若设置后,layout-marginLeft,这时就是相当于绑定关系的另一个控件的位置间距。
三.Kotlin语法糖 首先说下Kotlin特点 特点:1)代码量少且代码末尾没有分号;2)空类型安全(编译期处理了各种null情况,避免执行时异常);3)函数式的,可使用lambda表达式;4)可扩展方法(可扩展任意类的的属性);5)互操作性强,可以在一个项目中使用kotlin和java两种语言混合开发; 1.when 类似java的switch var i:Boolean=false when(i){ false -> Log.i(“Boolean”,“false”) is Boolean ->Log.i(“Boolean”,“false”) else -> Log.i(“Boolean”,“ture”) } when{ i==false -> Log.i(“Boolean”,“false”) }
这是2种用法,而且可以用is来做类型判断(is相当于java的instanceof)
2.val和val var 代表可变变量 ,val代表不可变 在代码中永远优先使用val声明变量,当val无法满足需求时在使用var
3.open open class Person{
}
class Student(val x:String,val y:Int):Person(){
init {
}
constructor(x:String):this(x,20)
}
首先Kotlin默认类是Final ,是不可以被继承,必须加open才可被继承 主构造函数 class Student(val x:String,val y:Int):Person() Student(val x:String,val y:Int),在Student括号里的就是主构造函数中的参数 initi{}就是具体的方法实现
关于继承(java的extends)和实现(java的implements),在Kotlin都用:表示。有同学可能有疑问继承那为什么Person()后面有(),这里有一个知识点:继承必须满足子类的构造函数必须调用父类的构造函数,默认调用父类的无参构造,如果父类定义了有参构造,那父类的无参构造就没有了,这时就要求 class Student(val x:String,val y:Int):Person()的Person()括号里面要输入参数,这时又有同学疑惑了,那我要重新定义参数吗,答案是不需要,把前面的参数传进来就好了,像class Student(val x:String,val y:Int):Person(x,y)这样就可以了。 次构造函数 constructor(x:String):this(x,20),这就是次构造函数,这里通过继承主构造函数间接继承Person类
- .maxBy{} 用于找到相应条件的最大值
- .filter{} 过滤函数,{}里面是过滤的条件
- . map{} 对集合元素进行映射转化
- .any{} 至少存在一个元素满足条件
- .all{} 所有都满足条件返回Boolen
- 语法糖简化Thread 和 设置监听
Thread{ }.start() 按键名.setonClickListener{} - ?. 为空不做事,不为空在执行.后面的语句
- ?:为空返回:后面的内容,不为空则返回?前面的内容
- ”${变量名}“ 在Kotlin用这个可用于表示变量,不用java中的+连接符
13.run,with,apply val result= with(StringBuilder()){ append(1) } val result1=StringBuilder().run { append(1) } val result3=result.apply { append(1) } run和with都是返回最后一行代码 apply返回的是对象本身,就是.apply前面的对象
4.总结 在慢慢接触公司业务的同时,我也发现了一些问题,想要写出一个业务需求并没有那么简单,首先完成基本功能,而且实现功能代码中如果需要某些框架或类,首先要通过快捷键查看已经有的代码中有没有类似已实现的类或框架,有的话就复用,防止重复代码出现,没有就新建。在公司中要根据公司要求相应的代码风格和变量命名格式。在刚接触一个app的代码时,因为对于大量的未参与编写代码,常不知道从哪里看起,这时可以通过”当前ACTIVITY”和”CHARLES”抓包工具查看当前的ACTIVITY和数据来源。要先解决出现的BUG,在交给测试人员和交互人员查看。这周的任务是通过RecycleView和Banner实现一个网络数据的界面展示,这里又用到了蓝湖工具。最后又开始看郭霖的《第一行代码》在加深对于基础的认识,最后用徐干的一句话来激励自己-根深而枝叶茂。
|