一. 认识 View.OnClickListener
1. 当前所在类实现接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class MainActivity : AppCompatActivity(), View.OnClickListener{ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main)
btn.setOnClickListener(this) }
override fun onClick(v: View?) { btn.text = "你好" } }
|
2. 创建一个新类实现接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class MainActivity : AppCompatActivity(){ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main)
btn.setOnClickListener(Temp()) }
class Temp: View.OnClickListener{ override fun onClick(v: View?) { v as TextView v.text = "你好" } }
}
|
3. 创建匿名类实现接口
1 2 3 4 5 6 7 8 9 10 11 12 13
| class MainActivity : AppCompatActivity(){ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main)
btn.setOnClickListener(object: View.OnClickListener { override fun onClick(v: View?) { btn.text = "你好" } }) } }
|
匿名类的改造
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| btn.setOnClickListener({view: View -> Unit btn.text = "你好" })
btn.setOnClickListener({view: View -> btn.text = "你好" })
btn.setOnClickListener(){view: View -> btn.text = "你好" }
btn.setOnClickListener{view: View -> btn.text = "你好" }
btn.setOnClickListener{ btn.text = "你好" }
|
补充知识:
1 2
| startActivity(Intent(this,SecondActivity::class.java))
|
二. 认识 横竖屏

1. 设置Activity的横竖屏状态
AndroidManifest.xml文件中找到所要设置的Activity的标签,标签中社会组screenOrientation
的值即可。
- landscape:强制横屏
- portrait:强制竖屏
- user:用户当前的首选方向
- behind:与在活动堆栈下的活相同方向
- sensor:根据物理方向传感器确定方向,取决于用户手持的方向
- nosensor:忽略传感器,即关闭重力感应,跟随系统确定其横屏还是竖屏
2. 设置对应状态的布局文件
默认的布局文件是竖屏状态下显示。
添加layout-land
文件夹,存放和layout文件夹中相同的文件名,横屏状态下即会加载对应的文件。
三. 认识also,apply,with,run
Java风格的书写方式
1 2 3
| val animator = ObjectAnimator.ofFloat(btn, "rotation", 0f, 360f) animator.duration = 1000 animator.start()
|
1. also
改写成also的方式
1 2 3 4
| ObjectAnimator.ofFloat(btn, "rotation", 0f, 360f).also { it.duration = 1000 it.start() }
|
also的原理
1 2 3 4 5 6 7 8 9
| @kotlin.internal.InlineOnly @SinceKotlin("1.1") public inline fun <T> T.also(block: (T) -> Unit): T { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } block(this) return this }
|
2. apply
改写成apply的方式
1 2 3 4
| ObjectAnimator.ofFloat(btn, "rotation", 0f, 360f).apply { duration = 1000 start() }
|
apply的原理
1 2 3 4 5 6 7 8 9
| @kotlin.internal.InlineOnly public inline fun <T> T.apply(block: T.() -> Unit): T { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } block() return this }
|
3. with和run
以后再谈
四. 国际化
找到String.xml文件,点击open editor,点击图标添加一门语言。
设置文本的默认值和对应语言的值,可以选择是否翻译。
查看对应的效果需要在手机中将语言改为对应的语言。


