ホームページ  >  記事  >  システムチュートリアル  >  Kotlin を使用して Android アプリケーションを開発するためのヒント

Kotlin を使用して Android アプリケーションを開発するためのヒント

王林
王林転載
2024-01-11 21:36:051221ブラウズ
###導入### 私たちは Kotlin という新しい言語の利点を理解しており、いくつかの一般的な構文とその簡単な使用法にも触れてきました。皆さんも Kotlin に非常に興味を持っていると思いますので、興味があると理解しましょう。 。では、この新しい言語を Android に適用するにはどうすればよいでしょうか?

今日の記事は、Kotlin を使用して Android アプリケーションを開発する方法を学び、Kotlin を従来の言語 Java と比較して、その美しさと優雅さを真に感じるのに役立ちます。

###構成### プロジェクトgradleファイル リーリー

app Gradle ファイル:

リーリー

あんこ

上記の設定により、anko の依存関係が導入されていることがわかります。 Anko は JetBrains が開発した強力なライブラリです。JetBrains と言えばすごいです。Kotlin 言語も彼らが開発しました。最も人気のある開発ツールの Intellij idea も彼らが開発しました。AS も IDEA をベースにしています。さて、本題に戻りますが、Anko は Kotlin によって公式に開発された Kotlin ライブラリで、Android アプリケーションの開発をより速く、より簡単にし、作成するコードをよりシンプル、明確、読みやすくすることができます。次のような複数の部分が含まれています リーリー

それでは次に、コードを通して Android 向け Kotlin 言語開発の利点を理解していきます。

もう findViewById する必要はありません

Android 開発を行ったことのある人は、多くのレイアウト ファイル findViewById を記述することも膨大な作業負荷であることを知っているため、最初に変数 findViewById を宣言してから、それをコントロールに強制的に組み込む必要があります。使用方法は一般に次のとおりです リーリー

書いていると時々吐きそうになります。今はバターナイフなどのアノテーションライブラリがあるので、アノテーションを使うときにfindViewByIdを使う必要がありません。使用方法は以下の通りです

リーリー

これは確かに当てはまります。アノテーションを使用すると、作業負荷がいくらか節約されますが、それでも最も単純ではありません。最も単純なことは、ユーザーの ID を使用してコントロールに値を直接割り当てることができることです。これはちょっと信じられないことだと思うでしょう。しかし、Kotlin はそれを実現します。このように直接書くことができます

リーリー

これを見ると、会うのが遅くなってしまったように感じますか? 非常に簡潔です。 user はレイアウト ファイルで宣言された ID で、.text は setText() として扱われます。Kotlin 言語では、Java のような set/get メソッドは表示されません。この方法で使用する場合 (findViewById を使用せず、XML コントロールを直接使用して、適用プラグイン「kotlin-android-extensions」を gradle に追加する必要があります)、次のコードを追加する必要があることに注意してください

リーリー

あんこのレイアウト

通常、レイアウトの作成には xml ファイルを使用しますが、タイプ セーフではない、null セーフではない、xml ファイルの解析により多くの CPU と電力を消費するなどのいくつかの欠点があります。 Anko Layout は DSL を使用して UI を動的に作成できます。Java を使用して動的にレイアウトを作成するよりもはるかに便利です。主により簡潔です。レイアウトを作成するために xml との階層関係があり、読みやすくなっています。 リーリー

OnCreate メソッドの setContentView を削除し、上記のコードを追加して、以下に示すような効果を表示します。つまり、TextView、EditText、および Button が垂直線形レイアウトに配置されます。 Button にはクリックイベントがあり、クリックされると EditText の内容は

になります。 トーストとして表示されます。


Kotlin を使用して Android アプリケーションを開発するためのヒント 上記のコードは非常にシンプルで理解しやすいですか? もちろん、デフォルトのコントロールではニーズを満たすことができません。たとえば、フォントの色とサイズを変更したり、幅と高さを設定したり、余白を設定したりします。もちろん、そのロジックと XML 記述レイアウトは同じルーチンであるため、実装方法は非常に簡単です。たとえば、次の実装は

リーリー

上記のコードについては説明する必要はないと思います。コントロールの効果がわかるはずです。その属性は、xml で設定した属性の名前に対応しているためです。

上記のUIの作成では、onCreateメソッド内に直接UIを作成するコードを記述しましたが、もちろん別の書き方もあります。 AnkoComponent インターフェースを実装する内部クラスを作成し、createView メソッドをオーバーライドします。このメソッドは、作成したレイアウトである View を返します。次のように変更します

リーリー

次に、onCreate メソッドにコード行を追加して、レイアウト ページを作成します。次のように### リーリー

ここでコンパイルして実行すると、その効果はレイアウト ファイルに記述されたインターフェイスと同じであることがわかります。しかし、そのパフォーマンスには利点もあり、実際のところ、パフォーマンス上の利点は見つかりません。いずれにせよ、この DSL は実に読みやすく、使いやすいです。上記のコードでは、10dp をピクセルに変換することを意味する dip(10) に気づいたかもしれません。これは Anko の拡張機能です。拡張機能と呼ばれます。 function. Anko のソースコードを読むと、拡張関数が多数使用されていることがわかりますが、これも Kotlin 言語の利点の 1 つです。 dip 拡張機能 (View 拡張機能の抽出) など、確かに非常に強力です。 リーリー

上記の resource.displayMetrics.density は、Java の getResources().getDisplayMetrics().density と同じ効果ですが、Java で書くよりも快適であることがわかります。

上記では、Button にクリック イベントを追加しましたが、それがラムダ式をサポートしていることがわかりました。トーストを表示したい場合は、トースト(「コンテンツ」)だけが必要です。非常に簡単ではないでしょうか。実際、これは拡張関数でもあり、

を実装しています。 リーリー

もちろん、ダイアログの作成は次のように非常に簡単です

リーリー

本当に見れば見るほど気持ちが楽になります(笑)。ここでは、強力でありながら非常にシンプルで簡潔なコード実装をもう 1 つ紹介します。

        doAsync {
            //后台执行代码
            uiThread { 
            //UI线程
            toast("线程${Thread.currentThread().name}") }
        }

该段代码实现的就是AsyncTask 的效果,但是你应该发现它比Java的实现简洁多了,当然除非是色盲,要不然你会看出简洁的。

如果你使用Kotlin开发Android一段时间后,会发现它给我们减少了很多的代码量,当然更多的优势及用法需要我们自己去探索。相信经过探索后它会让你大吃一惊。

实现一个简单的登录界面

Kotlin を使用して Android アプリケーションを開発するためのヒント

界面很简单,伪代码

<linearlayout>

<imageview></imageview>

<linearlayout> <imageview></imageview><edittext></edittext><linearlayout>

<linearlayout> <imageview></imageview><edittext></edittext><linearlayout>

<button></button>

<linearlayout> <checkbox></checkbox><textview></textview><linearlayout>

<textview></textview>

</linearlayout></linearlayout></linearlayout></linearlayout></linearlayout></linearlayout></linearlayout>

看着并不复杂的,那么xml实现的代码就不在这贴出了,如果你想看xml实现可看,那么接下来来只看Anko在Kotlin代码中实现这个布局。

  lateinit var et_account: EditText
    lateinit var et_password: EditText
    inner class LoginUi : AnkoComponent<loginactivity> {
        override fun createView(ui: AnkoContext<loginactivity>) = with(ui) {
            verticalLayout {
                backgroundColor = context.resources.getColor(android.R.color.white)
                gravity = Gravity.CENTER_HORIZONTAL
                imageView(R.mipmap.ic_launcher).lparams {
                    width = dip(100)
                    height = dip(100)
                    topMargin = dip(64)
                }

                linearLayout {
                    gravity = Gravity.CENTER_VERTICAL
                    orientation = HORIZONTAL
                    backgroundResource = R.drawable.bg_frame_corner
                    imageView {
                        image = resources.getDrawable(R.mipmap.ic_username)
                    }.lparams(width = wrapContent, height = wrapContent) {
                        leftMargin = dip(12)
                        rightMargin = dip(15)
                    }
                    et_account = editText {
                        hint = "登录账户"
                        hintTextColor = Color.parseColor("#666666")
                        textSize = 16f
                        background = null
                    }
                }.lparams(width = dip(300), height = dip(40)) {
                    topMargin = dip(45)
                }

                linearLayout {
                    orientation = HORIZONTAL
                    backgroundResource = R.drawable.bg_frame_corner
                    gravity = Gravity.CENTER_VERTICAL
                    imageView {
                        image = resources.getDrawable(R.mipmap.ic_password)
                    }.lparams {
                        leftMargin = dip(12)
                        rightMargin = dip(15)
                    }
                    et_password = editText {
                        hint = "登录密码"
                        hintTextColor = Color.parseColor("#666666")
                        textSize = 16f
                        background = null
                    }
                }.lparams {
                    width = dip(300)
                    height = dip(40)
                    topMargin = dip(10)

                }

                button("登录") {
                    gravity = Gravity.CENTER
                    background = resources.getDrawable(R.drawable.bg_login_btn)
                    textColor = Color.parseColor("#ffffff")
                    onClick {
                        if (et_account.text.toString().isNotEmpty() && et_password.text.toString().isNotEmpty())
                            startActivity<mainactivity>() else toast("请输入账户或者密码")
                    }
                }.lparams(width = dip(300), height = dip(44)) {
                    topMargin = dip(18)
                }
                linearLayout {
                    orientation = HORIZONTAL
                    gravity = Gravity.CENTER_VERTICAL
                    checkBox("记住密码") {
                        textColor = Color.parseColor("#666666")
                        textSize = 16f
                        leftPadding = dip(5)
                    }
                    textView("隐私协议") {
                        textColor = Color.parseColor("#1783e3")
                        gravity = Gravity.RIGHT
                        textSize = 16f
                    }.lparams(width = matchParent)
                }.lparams(width = dip(300)) {
                    topMargin = dip(18)
                }

                textView("Copyright © Code4Android") {
                    textSize = 14f
                    gravity = Gravity.CENTER or Gravity.BOTTOM

                }.lparams {
                    bottomMargin = dip(35)
                    weight = 1f
                }
            }
        }
    }</mainactivity></loginactivity></loginactivity>

看到上面的代码怎么样,看起来还不错吧,即使现在你不会写,但是你也能读懂它。在上面我们给登录按钮设置一个打开MainActivity的事件。startActivity的中写的是我们要跳转的Activity,如果给打开的界面传递参数,直接写在()中。例如我们将输入的账号和密码传到跳转的界面,则实现为

startActivity<mainactivity>("account" to et_account.text.toString(),"password" to et_password.text.toString())</mainactivity>

以上がKotlin を使用して Android アプリケーションを開発するためのヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlinuxprobe.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。