[Android & Kotlin] TextViewの文字表示

Kotlinで文字列を表示させてみましょう。TexViewとViewBindingを使います。

as412k 27 - [Android & Kotlin] TextViewの文字表示

Android Studio 4.1.3
API 30

 

000000047128 - [Android & Kotlin] TextViewの文字表示impression?a id=2545324&p id=969&pc id=1263&pl id=47128 - [Android & Kotlin] TextViewの文字表示 R904D.E24336V - [Android & Kotlin] TextViewの文字表示

TextView

 
JavaでのTextを表示させるTextViewは下のように作成しましたが、そのコードをKotlinに変えるとどうなるか試してみます。
 

テキストを表示するアプリです。テキストはTextViewを使います。よく使うものですが、いちいち書いていると疲れるのでコピペできるように簡単にしておきます。(基本こういうコンセプトです、はい)

 

 

Kotlinプロジェクトの作成

 
プロジェクト作成はLanguageの切り替えだけでKotlinとJavaの作り分けができます。
 
プロジェクトを作成するときに、プロジェクト名を設定するステップで
 
as412 15 - [Android & Kotlin] TextViewの文字表示
 
Languageの設定をKotlinにします。
 
これだけでプロジェクトがKotlin仕様で作成れます。

 

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

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

as412k 22 - [Android & Kotlin] TextViewの文字表示

  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] TextViewの文字表示

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

 

activity_main.xml

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

やり方としては、

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

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

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

as412k 24 - [Android & Kotlin] TextViewの文字表示

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

as412k 25 - [Android & Kotlin] TextViewの文字表示

actvity_main.xml のコードです。

 

ViewBinding

 
文字列を表示するために、MainActivity.kt の onCreate() 以下に TextView を設定します。
ViewBindingを使ってレイアウトファイルのIDとコードを結びつけるのですが、これは過去のやり方がまだネット上に残っています。(これはよくあります。仕様変更が早いので)

ActivityからXMLレイアウトファイルのTextViewを呼び出すには元々 findViewById を使っていました。
findViewById: 

activity_main.xml

MainActivity.kt

これには問題点がありました

  • コードの間違いがビルドしないと分からない
  • null safeではない、nullableとして気を付けるしかない
  • etc.

kotlinx synthetic:

Kotlinではsyntheticを使い簡略化できましたが…

こちらもどこからでも参照されてしまうとか、Kotlinでしか使えないなどで簡略化できるというメリットだけだったので、Googleとしては非推奨としました。代わりにViewBindingが推奨されています。

 
ViewBinding:
 
ViewBindingの設定はまず初めに
以下のように buildFeatures{ viewBinding true } を追加します。

build.gradle (Module: …)

次に、activity_main.xml ファイル内にある
android:text=”Hello World!”
を削除し代わりに
android:id=”@+id/textview”
を追加します。

MainActivity.kt
以下のように追加修正をします。

ここまででほぼ完成ですが、”Test TextView”の箇所が黄色くワーニングになています。

文字列の設定で、直接記述するリテラルは推奨されないのでリソースに設定します。
res¥values¥ 以下の strings.xml ファイルに書き込みます。

strings.xml

(app_name はアプリの名前ですからそのまま)

textview ではgetString()でIDをこのように呼び出します

記述が簡略化されたとは思えませんが、findViewByIdからのいくつかの問題は解決されています。

 

サンプルコード

 
まとめてみます。
 
MainActivity.kt

 
レイアウトです
activity_main.xml

 
リソースです
strings.xml

 
build.gradle (Module: …)
また記述後には Sunc が必要です(エディタ上部に表示が出ます)

実行します。
 
as412k 26b - [Android & Kotlin] TextViewの文字表示
 
完成ですが、文字が読みづらいので、TextViewにtestSizeとtextColorを設定してみます。
 

 
as412k 27 - [Android & Kotlin] TextViewの文字表示

 
 
References:
Kotlin and Android | Android Developers
Kotlin Programming Language
Kotlin Android Extensions の未来