【54】Kotlin android Anko 神兵利器

Anko 

是一个使开发Android应用更简单更快捷的库,Anko使你的代码简洁易懂, 使开发者不用再在意Android SDK对Java版本的限制(目前还不支持Java8 =。= ).

anko有很多模块。我们就选下面这一款集成看下

module:app -> build.gradle->dependencies

 添加以下代码

 

   implementation "org.jetbrains.anko:anko-sdk15:0.9.1"

同步代码后

布局

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    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">

    <TextView
        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" />

</androidx.constraintlayout.widget.ConstraintLayout>

 

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<TestActivity>("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<TestActivity>("Key" to "From mainActivity")
        }

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安果移不动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值