先日、Kotlinが1.0-betaとなりました。(The Kotlin Language: 1.0 Beta is Here!)
そろそろ1.0リリースも見えてきていますし、GitHub上のKotlin LOCもどんどん増加しています。
Kotlinを始めてみるにはいい時期じゃないでしょうか。
今回はKotlin…ではなく、Android Studioのプラグインである「Kotlin Android Extensions」で提供されている機能について説明します。
・Kotlin Android Extensionsとは
「Kotlin Android Extensions」は、「findViewById書くの面倒。どうにかしてよ、これ。たまにNPEも出るし…」問題に対応したAndroid Studio(Intelli J)のプラグインです。
最近のAndroidアプリ開発でfindViewByIdをいちいち書いてる人は少ないとは思います。Butter KnifeなどのInjectionを利用したライブラリを利用していることでしょう。
なので、目新しさはない機能ではありますが「実行時にライブラリが必要ない。」「Annotationを利用しなくてよい。」など利点も多少あるのでKotlinを使ったAndroidアプリ開発には利用したいところです。
どのような機能かを試すためにAndroid Studioでプロジェクトを作成しましょう。
プロジェクトにはEmpty Activityを追加した形で作成してください。
プロジェクトが作成できたら、Getting started with Android and Kotlinを参考にプロジェクトをKotlin対応に変更します。
プロジェクトをKotlin対応にできたら、appのbuild.gradleを修正します。
Kotlin Android Extensionsを利用するためにはbuild.gradleのbuildscript→dependenciesにExtensionsを利用するためのclasspathを追加する必要があります。
buildscript { ext.kotlin_version = '1.0.0-beta-1103' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // 以下の行を追加 classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version" } }
これでプロジェクトの準備は完了です。
それではactivity_main.xmlを以下の内容にしてください。
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="jp.co.techfirm.blog.androidextensiondemo.MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello, World!" android:id="@+id/textview_hello_message" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="OK" android:id="@+id/button_ok" android:layout_below="@+id/textview_hello_message" android:layout_centerHorizontal="true" android:layout_marginTop="30dp" /> </RelativeLayout>
Activityの画面レイアウトはTextViewとButtonの簡単なレイアウトにしました。
では、実際にKotlin Android Extensionsを利用してみましょう…といっても、ソースコードに1行足すだけですけどね。
MainActivity.ktにimport文を1行追加します。
package jp.co.techfirm.blog.androidextensiondemo import android.support.v7.app.AppCompatActivity import android.os.Bundle // Kotlin Android Extensionを利用する // import kotlinx.android.synthetic.<layoutファイル名>.* import kotlinx.android.synthetic.activity_main.*; class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } }
たった、これだけです。これでfindViewByIdの呪縛から逃れられます(笑)。
例えば、ButtonをクリックしたらTextViewの内容を「ボタン…押しましたね。」に変更するのであれば以下のように記述します。
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) button_ok.setOnClickListener(View.OnClickListener { textview_hello_message.text = "ボタン...押しましたね" }) }
findViewByIdがないだけで結構スッキリします。
この例ではActivity上にWidgetが少ないので恩恵がわかりづらいですが、通常のAndroidアプリ開発ではonCreateメソッド内のコードの半分はfindViewById(個人の感覚です)になることもあるので、かなりスッキリできます。
今回はちょっと短めですが、これくらいで。
次回はKotlinをAndroidアプリ開発に利用することで得られるメリットをアプリ開発ベンダーという視点から記載してみたいと思います。