[Android & Kotlin] Buttonアプリを作ってみる

KotlinでAndroidの Button アプリを簡単に作ってみました。
findViewByIdの代わりにAndroid Kotlin Extensions プラグインを使っていましたが、現在では ViewBinding が推奨されています。
 
as413k m21 - [Android & Kotlin] Buttonアプリを作ってみる

Android Studio 4.1.3
API 30

R904D.E24336V - [Android & Kotlin] Buttonアプリを作ってみる

Button

 
JavaでのButtonアプリを下のように作成しましたが、
 

アプリの作り方の基本を習得するために、ボタンを押したら文字が変わるという簡単なアプリを作ってみます。

 
その作り方をそのままKotlinに変えるとどうなるか試してみます。
 

 

Kotlinプロジェクトの作成

 
プロジェクトをJavaで開発するのか、KotlinなのかはLanguageの切り替えで簡単にできます。
 
プロジェクトを作成するときに、プロジェクト名を設定するステップで
 
as412 15 - [Android & Kotlin] Buttonアプリを作ってみる
 
Languageで Kotlin を選択します。
これだけでプロジェクトがKotlin仕様になり、クラスファイル名が MainActivity.kt などと色々と変更されます。

 

プロジェクト構成ファイル

 
プロジェクトを作ると幾つかのファイルが既にできています。

as412k 22 - [Android & Kotlin] Buttonアプリを作ってみる

  1. MainActivity.kt
  2. activity_main.xml
  3. AndroidManifest.xml
    • マニフェストにはアプリの各コンポーネントが定義されていて、セキュリティ上ユーザーに許可を得るための記述などがされています。
  4. build.gradle
    • 同じ名前のファイルが2つあり、プロジェクト用(Project: xxx)とモジュール用(Module: xxx.app)で、もっぱらモジュール用を使用します。ターゲットのAPIレベルやライブラリーの情報が設定されます。
 

MainActivity.kt

 
アプリのエントリポイントで、Kotlin の主なコーディングは MainActivity.ktにします。

アプリをビルドして実行するとこの Activity のインスタンスが起動し、そのレイアウトが読み込まれます。

as412k 23 - [Android & Kotlin] Buttonアプリを作ってみる

Empty Activityを選んだので、ある程度の基本的なコードは既に入っています。

 

activity_main.xml

 
Activity のユーザー インターフェース(UI)のレイアウトを定義する XML ファイルで、ここにコードを記述あるいは「Design」タグからレイアウトエディタでも作成が可能です。

やり方としては、

  • 「Design」を使って画面上にUIパーツを配置する
  • 「Code」で全てコードで記述

「Design」ではレイアウトの配置全体をデザイン的に決めていくには便利です。

右上の3つ並んだアイコンで「Code」「Split」「Design」の切り替えができます。

as412k 24 - [Android & Kotlin] Buttonアプリを作ってみる

 
「Code」は並んだアイコンの左端です。
微調整も含めた細かな設定はコーディングがいいでしょう、またネットにある開発情報の多くがコードです。

as412k 25 - [Android & Kotlin] Buttonアプリを作ってみる

actvity_main.xml のコードです。

 

ViewBinding

 
以前は findViewById を使ってXMLレイアウトファイルからIDを読みだしていたのを
Kotlin Android Extensionsのプラグインにある kotlinx.android.synthetic を使って簡略化していました。

 
ただ、kotlinx synthetics には問題点があり、非推奨となっています。
Kotlin Android Extensions の未来

代案として ViewBinding が推奨されています。
Migrate from Kotlin synthetics to Jetpack view binding

ViewBinding:
セットアップとして、build.gradle ファイルに viewBinding 要素を追加します。

build.gradle

プロジェクトのXML レイアウトファイルが
activity_main.xml
の場合は、そのレイアウトファイル毎にViewBinding Class を作成します。

[package name].databinding.[XMLレイアウトファイル名から]Binding

ActivityMainBindingはXMLファイルの名前(activity_main)を
キャメルケースに変換して、末尾に「Binding」という単語を追加することで生成します。

例)

activity_main.xml >> ActivityMainBinding
sub_layout.xml >> SubLayoutBinding
main.xml >> MainBinding

Viewのidでは

text_view >> textView
textview >> textview
button >> button

Activityでの使用:

Kotlin Android Extensionsに比べると、いえいえfindViewIdに比べても記述が増えてしまうのですが
findViewIdの問題点の改善もあるのでいたしかたないということでしょうか

Kotlin Android Extensions:
 
非推奨ですが2021年9月までは暫定的に残っているようです。
Android Studio 4.1 以降でどうしても使いたい場合は以下のように設定するとしばらくは使えるようです。

build.gradle (Module: xxx) のpluginsに

id ‘kotlin-android-extensions’

を追加すれば使えるようになります。

 

サンプルコード

 
まとめてみます。
 
MainActivity.kt

 
XMレイアウトファイル
activity_main.xml

 
文字列をコードにリテラル(直書き)するのではなく、strings.xml に記述して引用するのがお行儀のよいとされています。

直に書いていると後でハマることになります。(と理解してけっこうやっていましたが)最近はうるさくワーニングが出るのでちゃんとしてみました。

 
strings.xml

app_name はプロジェクトの名前なのでそのままでも、書き換えてもいいでしょう。
strings.xml のファイルは以下の場所にあります。

as413k m18 - [Android & Kotlin] Buttonアプリを作ってみる

次にbuild.gradleですが2つあるので注意してください。
また記述後には Sunc が必要です(エディタ上部に表示が出ます)
 
build.gradle

android { } の中にbuildFeatures{ } を追加します。

as413k m19 - [Android & Kotlin] Buttonアプリを作ってみる

実行してみましょう。
 
as413k m20 - [Android & Kotlin] Buttonアプリを作ってみる
 
デフォルトではちょっと見栄えがわるいので、フォントを大きくしたりレイアウトを変更してみます。
activity_main.xml

 

 
Kotlinでは生産性が上がるという意見もありますが、どうでしょう。今後のGoogleにおけるJavaの扱いがどうなるか、どうなっても対応できるようにしておいた方がいいのかもしれませんね。
 
References:
Kotlin and Android | Android Developers
Kotlin Programming Language
Kotlin Android Extensions の未来
Use view binding to replace findViewById