お首が長いのよお首が長いのよ

チラシの裏よりお届けするソフトウェアエンジニアとして成長したい人のためのブログ

2019-01-08

【Android App with Kotlin #1】ボタンウィジェットを使う

Kotlinの勉強始めました。

環境

このコードは以下の環境で書いています。

  • macOS 10.14.2(Mojave)
  • Android Studio 3.2.1
  • Android SDK 28
  • gradle 4.6

レイアウトファイル

デザインタブから「Button」を挿入する。

テキストタブでレイアウトやコードの微修正します。

xml
1<?xml version="1.0" encoding="utf-8"?>
2<android.support.constraint.ConstraintLayout
3        xmlns:android="http://schemas.android.com/apk/res/android"
4        xmlns:tools="http://schemas.android.com/tools"
5        xmlns:app="http://schemas.android.com/apk/res-auto"
6        android:layout_width="match_parent"
7        android:layout_height="match_parent"
8        tools:context=".MainActivity">
9
10    <TextView
11            android:id="@+id/tvHello"
12            android:layout_width="wrap_content"
13            android:layout_height="wrap_content"
14            android:text="Hello World!"
15            app:layout_constraintTop_toTopOf="parent"         //[a]
16            app:layout_constraintBottom_toBottomOf="parent"   //[b]
17            app:layout_constraintLeft_toLeftOf="parent"       //
18            app:layout_constraintRight_toRightOf="parent" />  //[d]
19    <Button
20            android:id="@+id/btnTouchMe"
21            android:text="Touch me!"
22            android:layout_width="wrap_content"
23            android:layout_height="wrap_content"
24            android:layout_marginStart="8dp"
25            android:layout_marginEnd="8dp"
26            android:layout_marginTop="8dp"
27            android:layout_marginBottom="8dp"
28            app:layout_constraintTop_toBottomOf="@+id/tvHello"  //[a]
29            app:layout_constraintBottom_toBottomOf="parent"     //[b]
30            app:layout_constraintStart_toStartOf="parent"       //
31            app:layout_constraintEnd_toEndOf="parent" />        //[d]
32
33</android.support.constraint.ConstraintLayout>
34

android:id=は一番上にあるのが個人的に好きなので持ってきました。 [a]~[d]ではConstraintLayoutがデフォルトで使用されているので、「このオブジェクトの(上/下/左/右)に配置する」を指定するコードを記述しています。

Activityファイル

Java
1class MainActivity : AppCompatActivity() {
2
3    override fun onCreate(savedInstanceState: Bundle?) {
4        super.onCreate(savedInstanceState)
5        setContentView(R.layout.activity_main)
6
7
8        //レイアウトファイルで宣言したボタンウィジェットを読み込む [1]
9        val touchMeButton: Button = findViewById(R.id.btnTouchMe) as Button
10        //レイアウトファイルで宣言したテキストビューを読み込む [2]
11        val helloText: TextView = findViewById(R.id.tvHello) as TextView
12
13
14        //ボタン押下時の処理[3]
15        touchMeButton.setOnClickListener{
16            tvHello.text = "Good!"
17        }
18    }
19}
20

Buttonに関するコードを記述します。 Buttonをクリックすると、テキストが変わる仕組みです。

Button [1]、[2]

Buttonクラスを helloButtonという名前で宣言すると同時に、レイアウトファイルに用意したButtonのIDを引っ張ってきます。 また、[2]で書いているTextViewの内容も同様です。

  • val は定数。 Javaのfinalと同じ。基本はこっちで宣言するといい。
  • var は変数。 後々変数の中身を別の値で再代入する場合に利用する。
  • touchMeButton: Button Button型の定数をtouchMeButonという名前で用意する
  • as Button Button型にキャストしています。

Button [3]

Buttonクラスが持つメソッドsetOnClickListenerを使って、ボタンがタップされた時の動作を記述している。 この時、touchMeButton(すなわちButtonクラス)がどんなメソッドを持っているかはここで調べられる。 public class button

Activityファイル(別の書き方)

Kotlin Android extentionsが有効であれば、以下のような書き方もできます。

Java
1class MainActivity : AppCompatActivity() {
2
3    override fun onCreate(savedInstanceState: Bundle?) {
4        super.onCreate(savedInstanceState)
5        setContentView(R.layout.activity_main)
6
7        btnTouchMe.setOnClickListener{
8            tvHello.text = "Good!"
9        }
10    }
11}
12
13

Javaで書く場合と比べて恐ろしく短い・・・。

リンク

次回の記事

次回はImage ViewとImage Buttonです。 【Android App with Kotlin #2】画像を取り扱う(ImageView/ImageButton)

/以上

よかったらシェアしてください!