Android 開発のための Kotlin と anko の融合

Android 開発のための Kotlin と anko の融合

ここに画像の説明を挿入

Kotlin は JVM ベースのプログラミング言語で、最近では kotlin や anko に関する研究が行われています。そして、現在の APP 設計モードと組み合わせて、予備的な開発方法が想定されています。そして、新しいプロジェクトに適用する準備ができています。

Kotlin は有名な JB 社によって開発された jvm 言語です. 公式ウェブサイトのアドレスは; http://kotlinlang.org/公式ウェブサイトの紹介は:

Statically typed programming language for the JVM, Android and the browser

Kotlin の設計思想は非常に軽量であり、Java コードは可能な限り再利用する必要があります. 最後の手段でない限り、それ自体で大規模で包括的なライブラリを実装することは通常ありません. これにより、Kotlin は非常に軽量になり、Android プロジェクトへの統合は最終的なパッケージ サイズに大きな影響を与えません。Kotlin の利点について、私なりにまとめてみましたが、 1. Java によるシームレスな呼び出しは、初期段階では手間がかからず、Java にすればよい。2. 多くのグラマシュガーによりコードが非常に簡潔になり、習熟後の開発効率は Java よりも高くなります。たとえば、拡張関数、単純なカプセル化は、多くの Utils ツール クラスを記述する必要がなくなり、拡張メソッドを特定のクラスに直接かつ柔軟に追加するだけです。例えば:

inline fun Activity.toast(message : Int) {
     Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
 }

このように、Activity クラスには追加の toast メソッドがあります. 実は anko にも多数の拡張メソッドが書かれています. DSL 構文を直接使用して UI を記述できます. when ステートメントの書き方の別の例:

when(x) {
1-> {}
2-> {}
}

コピー

明らかに、従来の Java の記述方法と比較して、anko を使用した後の言語はより簡潔です。

switch(x) {
case 1:
 break;
case 2:
 break;
default:
 break;
}

3. より安全. Kotlin は null 参照を排除したいようです. Java では null オブジェクトを呼び出すと NullPointException がスローされます. Kotlin では String オブジェクトなどの null にできないオブジェクトは次のように記述されます.

var a: String? = "abc"

4. 良好な生態環境と開発共同体。Kotlin はまだ比較的新しい技術であり、多くの人がその利点を試しています。Rxシリーズをはじめ、RxJavaのKotlin版であるRxKotlinもリリース

#Kotlin と Anko は、https://github.com/Kotlin/anko にある Anko の github アドレスを使用します。anko を統合する手順は次のとおりです。まず、プロジェクトのビルド ファイルに次のコードを追加します。

dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"  //这是需要你加入的
    }

allprojects {
    repositories {
        jcenter()
        maven {url 'https://dl.bintray.com/jetbrains/anko'} //这是你需要加入的
    }
}

次に、依存関係をアプリ モジュールのビルド ファイルに追加します。

compile "org.jetbrains.anko:anko-sdk15:0.9.1" // So here it's 15 too
    compile "org.jetbrains.anko:anko-appcompat-v7:0.9.1"
    compile "org.jetbrains.anko:anko-design:0.9.1"
    compile "org.jetbrains.anko:anko-recyclerview-v7:0.9.1"

kotlin の利点に従って、xml を使用して記述するのではなく、anko を使用して記述することを選択します。このような利点は、anko の github README ファイルで次のように説明されています。

  1. 安全でない
  2. 空気の安全がない
  3. レイアウトごとに似たコードや重複したコードを大量に書かなければならない
  4. XML は CPU 時間とデバイスの電源を浪費し (解析の理由になるはずです)、コードの再利用を許可しません (完全には理解できません。インクルード タグではなく、カスタム レイアウトが原因である可能性があります)。
  5. コントラクト インターフェースとエンティティ オブジェクトについては、Kotlin で直接記述できます. 1 つ目は簡潔な構文のためであり、2 つ目は setter/getter メソッドをあまり記述しないためです.

具体的には、UIの表示やイベントなどのロジックを行うMainActivityクラスを最初に記述します。

class MainActivity : AppCompatActivity(), MainContract.View {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
}

次に、onCreate で ui レイアウトを記述します.ログイン レイアウトは比較的シンプルで、2 つの入力ボックスとボタンのみです.もちろん、多点共通コントロールを試すために、上部にツールバーを追加しました.

relativeLayout {

            var mToolbar =
            toolbar(R.style.Base_ThemeOverlay_AppCompat_Dark_ActionBar) {
                id = ID_TOOLBAR
                title = "登录"
                backgroundColor = ContextCompat.getColor(this@MainActivity, R.color.colorPrimary)

                popupTheme = R.style.Base_ThemeOverlay_AppCompat_Light
                inflateMenu(R.menu.main)

                setNavigationIcon(R.mipmap.img_back_white)

                onMenuItemClick {
                    menuItem ->
                    val itemId = menuItem!!.itemId
                    when (itemId) {
                        R.id.menu_main -> {
                            toast(R.string.main_toast)
                        }
                    }
                    false
                    }

                lparams {
                    width = matchParent
                    height = wrapContent
                }

                setNavigationOnClickListener {
                    finish()
                }
            }

            var mUserEdit = editText {
                id = ID_USER_EDIT
                hint = "请输入同户名"
                maxLines=1

                lparams {
                    width = matchParent
                    height = wrapContent
                    margin=dip(8)
                    centerInParent()
                }
            }

            var mPsdEdit = editText {
                id= ID_PSD_EDIT
                hint="请输入密码"
                maxLines=1
                maxWidth = 16

                lparams {
                    width = matchParent
                    height = wrapContent
                    margin = dip(8)
                    below(ID_USER_EDIT)
                }
            }


            var mButton = button("登录") {
                id= ID_BTN_LOGIN

                onClick {
                    var username = mUserEdit.text.toString()
                    var password = mPsdEdit.text.toString()

                    mPresenter!!.login(username,password)
                }

                lparams {
                    width= matchParent
                    height = wrapContent
                    margin = dip(8)
                    below(ID_PSD_EDIT)
                }
            }
        }

コード内の id は定数を使用しています Kotlin には static という概念はありませんが、static に似た機能をシミュレートして実装できるコンパニオン オブジェクト (コンパニオン オブジェクト) があります。

companion object static {
        val ID_TOOLBAR: Int = 1
        val ID_USER_EDIT: Int = 2
        val ID_PSD_EDIT: Int = 3
        val ID_BTN_LOGIN: Int = 4
    }

ご覧のとおり、この方法で UI を記述するためのコードは非常に簡潔です。そして可読性が非常に高いです。XML の記述レイアウトに慣れている学生は、内部のコードの意味を理解できると思います。同時に、anko SDL プレビューと呼ばれる公式の Android Stduio プラグインもリリースされます。開発者が書き込みの効果をプレビューできることは非常に便利です。次に、MVP の考え方に従って BaseView および BasePresenter インターフェイスを記述します。

interface BaseView<T> {
    fun setPresenter(presenter: T)
}
interface BasePresenter

Kotlin を使用して、V 層と P 層の間の通信を確立する MainContract インターフェースを記述します。

interface MainContract {
    interface View : BaseView<Presenter> {
        fun login()
        fun loginNUll()
    }

    interface Presenter : BasePresenter {
        fun login(username: String, password: String)
    }
}

Java を使用して P 層コードを記述します。

public class MainPresenter implements MainContract.Presenter {

    private MainContract.View mView;

    public MainPresenter(MainContract.View view) {
        mView = view;
        mView.setPresenter(this);
    }

    @Override
    public void login(String username, String password) {
        if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) {
            mView.loginNUll();
            return;
        }
        mView.login();
    }
}

これは、ログインのロジックをシミュレートするためのものであり、MainActivity へのログインを実際に実装してコードをここに追加するためのものではありません。

var mPresenter : MainContract.Presenter? = null
override fun setPresenter(presenter: MainContract.Presenter) {
    mPresenter = presenter!!
}

コピー

V レイヤーが実装するコールバック メソッドを実装します。

override fun loginNUll() {
    toast("用户名密码不得为空")
}

override fun login() {
    toast("执行登录逻辑...")
}

ここまでで、Kotlin と anko で Android を開発する例を完成させました。

やっと

より多くの Kotlin 学習教材を無料でスキャンできます!

高度な Kotlin 拡張戦闘

第 1 章 Kotlin 入門チュートリアル

            ● Kotlin 概述

            ● Kotlin 与 Java 比较

            ● 巧用 Android Studio

            ● 认识 Kotlin 基本类型

            ● 走进 Kotlin 的数组

            ● 走进 Kotlin 的集合

            ● 完整代码

            ● 基础语法

画像

第 2 章 Kotlin の実用的なピット回避ガイド

            ● 方法入参是常量,不可修改

            ● 不要 Companion、INSTANCE?

            ● Java 重载,在 Kotlin 中怎么巧妙过渡一下?

            ● Kotlin 中的判空姿势

            ● Kotlin 复写 Java 父类中的方法

            ● Kotlin “狠”起来,连TODO都不放过!

            ● is、as` 中的坑

            ● Kotlin 中的 Property 的理解

            ● also 关键字

            ● takeIf 关键字

            ● 单例模式的写法

画像

第3章 プロジェクト戦闘「Kotlin Jetpack戦闘」

            ● 从一个膜拜大神的 Demo 开始

            ● Kotlin 写 Gradle 脚本是一种什么体验?

            ● Kotlin 编程的三重境界

            ● Kotlin 高阶函数

            ● Kotlin 泛型

            ● Kotlin 扩展

            ● Kotlin 委托

            ● 协程“不为人知”的调试技巧

            ● 图解协程:suspend

画像

史上最も詳細な Android 版 kotlin コルーチン エントリー アドバンスド コンバット

第 1 章 Kotlin コルーチンの基本の紹介

            ● 协程是什么

            ● 什么是Job 、Deferred 、协程作用域

            ● Kotlin协程的基础用法

画像

第2章 Kotlinコルーチンの重要な知識ポイントの予備説明

            ● 协程调度器

            ● 协程上下文

            ● 协程启动模式

            ● 协程作用域

            ● 挂起函数

画像

第3章 Kotlin コルーチンの例外処理

            ● 协程异常的产生流程

            ● 协程的异常处理

画像

Chapter 4 Androidにおけるkotlinコルーチンの基本的な応用

            ● Android使用kotlin协程

            ● 在Activity与Framgent中使用协程

            ● ViewModel中使用协程

            ● 其他环境下使用协程

おすすめ

転載: blog.csdn.net/Misdirection_XG/article/details/130430085