是一个使开发Android应用更简单更快捷的库,Anko使你的代码简洁易懂, 使开发者不用再在意Android SDK对Java版本的限制(目前还不支持Java8 =。= ).
anko有很多模块。我们就选下面这一款集成看下
module:app -> build.gradle->dependencies
添加以下代码
implementation "org.jetbrains.anko:anko-sdk15:0.9.1"
同步代码后
布局
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
android:id="@+id/tv_hello"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
package com.anguomob.demoforktanko
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
import org.jetbrains.anko.onClick
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
tv_hello.onClick { view->
Toast.makeText(view!!.context,tv_hello.text,Toast.LENGTH_LONG).show()
}
}
}
只简化了这个 onClick 有这个必要加一个依赖吗?
还可以简化事件传递
之前传递方法 MainActivity
package com.anguomob.demoforktanko
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
import org.jetbrains.anko.onClick
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
tv_hello.onClick { view ->
val intent = Intent(this@MainActivity, TestActivity::class.java)
intent.putExtra("Key","From MainActivity")
startActivity(intent)
}
}
}
接受方 TestActivity
package com.anguomob.demoforktanko
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_test.*
class TestActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_test)
intent.extras?.get("Key").let{
tv_ta_hello.text= it.toString()
}
}
}
anko简化后 传递方法 MainActivity
package com.anguomob.demoforktanko
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
import org.jetbrains.anko.onClick
import org.jetbrains.anko.startActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
tv_hello.onClick { view ->
startActivity("Key" to "From mainActivity")
}
}
}
运行一下 效果不变
..新版本的依赖 不支持.onClik方法了。
implementation "org.jetbrains.anko:anko-sdk15:0.10.8"
anko有自己的dsl 可以自己定义布局
我们修改之前的 TestActivity . 删除布局 自定义布局
这有点像ios开发。as 上面也有布局转换成ak的插件 可以去了解下。搜索anko就可以搜到
package com.anguomob.demoforktanko
import android.os.Bundle
import android.view.Gravity
import androidx.appcompat.app.AppCompatActivity
import org.jetbrains.anko.matchParent
import org.jetbrains.anko.relativeLayout
import org.jetbrains.anko.textView
class TestActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val text = intent.extras?.get("Key").toString()?:"没收到数据啊"
relativeLayout {
textView(text) {
}.lparams(width = matchParent, height = matchParent) {
gravity = Gravity.CENTER
}
}
}
}
MainActivity
package com.anguomob.demoforktanko
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
import org.jetbrains.anko.startActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
tv_hello.setOnClickListener { view ->
startActivity("Key" to "From mainActivity")
}
}
}