基本的なインタラクティブなサイコロ投げアプリを作成する

この Codelab では、ユーザーが Button をクリックしてサイコロを振る、Dice Roller Android アプリを作成します。サイコロを振った結果は画面の TextView に表示されます。

まず Android Studio の Layout Editor を使用してアプリのレイアウトを作成します。次に、Button をクリックしたときの動作を定義する Kotlin コードを記述します。

Prerequisites

  • Android Studio で「Hello, World!」を作成して実行できる。
  • アプリで TextViewsImageViews を使用する方法に精通している。
  • Layout EditorTextView の属性を変更できる。
  • アプリの翻訳や文字列の再利用のために、テキストを文字列リソースに抽出する方法を知っている。
  • 前の Codelab で学んだ Kotlin プログラミングの基本。

学習内容

  • Android アプリに Button を追加する方法。
  • アプリ内で Button がタップされたときの動作を追加する方法。
  • アプリの Activity コードを開いて変更する方法。
  • Toast メッセージの表示方法。
  • アプリの実行中に TextView のコンテンツを更新する方法。

作成するアプリの概要

  • サイコロを振るための Button を備え、出目の結果により画面上のテキストを更新する Dice Roller Android アプリ。

前提条件

  • Android Studio がインストールされているパソコン

この Codelab を完了すると、アプリの外観は次のようになります。

Empty Activity プロジェクトを作成する

  1. Android Studio で既存のプロジェクトをすでに開いている場合は、[File] > [New] > [New Project...] に移動して、[Create New Project] 画面を開きます。
  2. [Create New Project] で [Empty Activity] テンプレートを使用して、新しい Kotlin プロジェクトを作成します。
  3. アプリの名前を「Dice Roller」とし、最小 API レベルに 19(KitKat)を選びます。

重要: Android Studio で新しいプロジェクトを作成する方法については、初めての Android アプリを作成して実行するをご覧ください。

  1. 新しいアプリを実行すると、次のようになります。

Layout Editor を開く

  1. [Project] ウィンドウで、activity_main.xml をダブルクリックして開きます([app] > [res] > [layout] > [activity_main.xml])。Layout Editor のアプリの中心に「Hello World」TextView だけが表示されます。

次に、Button をアプリに追加します。Button は、ユーザーがタップしてアクションを実行できる、Android のユーザー インターフェース(UI)要素です。

このタスクでは、「Hello World」TextView の下に Button を追加します。TextViewButton は、ViewGroup の一種である ConstraintLayout 内に配置されます。

ViewGroup 内に Views がある場合、Views は親 ViewGroup の子とみなされます。このアプリの場合は、TextViewButton が親 ConstraintLayout の子とみなされます。

アプリ内で既存の ConstraintLayout の子として Button を追加します。

レイアウトにボタンを追加する

  1. Button を [Palette] から [Design] ビューにドラッグし、「Hello World」TextView の下に配置します。
  2. [Component Tree] の [Palette] の下で、ButtonTextViewConstraintLayout の下に(ConstraintLayout の子として)表示されていることを確認します。
  3. Button に制約が設定されていないというエラーが表示されます。ButtonConstraintLayout 内にあるため、水平方向と垂直方向の制約を設定して配置する必要があります。

ボタンの位置を決める

このステップでは、Button の上部から TextView の下部までの垂直方向の制約を追加します。これにより、ButtonTextView の下に配置されます。

  1. [Design] ビューで、Button の上端にある青い枠線付きの白い円を長押しします。ポインタをドラッグすると、ポインタの動きに合わせて矢印が表示されます。「Hello World」TextView の下端に達したら離します。これによりレイアウトの制約が確立され、ButtonTextView の直下にスライドします。
  2. Layout Editor の右側にある [Attributes] を確認します。
  3. [Constraint Widget] で、TextView の下部に設定された [Top – BottomOf textView (0dp)] という新しいレイアウトの制約があることを確認します。(0dp) は、マージンが 0 であることを表します。また、水平方向の制約が欠落しているというエラーも発生します。
  4. Button の左側から親 ConstraintLayout の左側までの水平方向の制約を追加します。
  5. 右側でもこれを繰り返し、Button の右端を ConstraintLayout の右端に接続します。結果は次のようになります。

  1. Button を選択したままの場合、[Constraint Widget] は次のようになります。新たに [Start → StartOf parent (0dp)] と [End → EndOf parent (0dp)] の 2 つの制約が追加されています。つまり、Button は親である ConstraintLayout 内で、水平方向の中央に配置されます。
  1. アプリを実行します。下のスクリーンショットのようになります。Button をクリックすることはできますが、まだ何も行われません。先に進みましょう。

ボタンのテキストを変更する

Layout Editor の UI をさらに少し変更しましょう。

Button のラベルは「Button」ではなく、ボタンが実行する動作を示すように「Roll」に変更します。

  1. Layout EditorButton が選択された状態で、[Attributes] に移動し、[text] を [Roll] に変更して Enter(Mac では Return)キーを押します。

  1. [Component Tree] の Button の横に、警告を示すオレンジ色の三角形が表示されます。三角形にカーソルを合わせると、メッセージが表示されます。Android Studio がアプリのコード内でハードコードされた文字列(「Roll」)を検出し、代わりに文字列リソースを使用することを提案します。

ハードコードされた文字列を使用すると、アプリは他の言語に翻訳されにくくなるため、アプリの別の部分で文字列を再利用するのが難しくなります。幸いなことに、Android Studio では自動的に修正されます。

  1. [Component Tree] で、オレンジ色の三角形をクリックします。

警告メッセージの全文が表示されます。

  1. メッセージの下部で、[Suggested Fix] の下にある [Fix] ボタンをクリックします(表示されていない場合は、下にスクロールしてください)。
  2. [Extract Resource] ダイアログが開きます。ここでは文字列を抽出しますが、これは「Roll」というテキストを取り込み、strings.xml[app] > [res] > [values] > [strings.xml])に roll という文字列リソースを作成することを意味します。デフォルト値が正しいので、[OK] をクリックします。

  1. [Attributes] で、Button の [text] 属性が @string/roll と表示され、先ほど作成したリソースを参照するようになりました。

[Design] ビューの Button には、引き続き Roll と表示されるはずです。

TextView のスタイルを設定する

「Hello World!」のテキストは小く表示され、メッセージはアプリに関係がありません。このステップでは、小さな「Hello, World!」メッセージを出目の値を示す数字に置き換え、見やすいようにフォントを大きくします。

  1. Design EditorTextView を選択すると、その属性が [Attributes] ウィンドウに表示されます。
  2. TextView の [textSize] を 36sp に変更すると、サイズが大きく読みやすくなります。[textSize] が表示されていない場合は、下にスクロールします。

  1. TextView の [text] 属性をクリアします。ユーザーがサイコロを振るまで、TextView には何も表示する必要がありません。

ただし、アプリのレイアウトとコードを編集する際に TextView でテキストを確認できると非常に便利です。この目的のために、レイアウト プレビューでのみ表示されるテキストを TextView に追加できます。このテキストはアプリの実行時には表示されません

.

  1. [Component Tree] で TextView を選択します。
  2. [Common Attributes] の下にある [text] 属性を見つけます。その下に、もう 1 つの [text] 属性がツールアイコンとともに表示されます。[text] 属性は、アプリの実行中にユーザーに表示される属性です。ツールアイコン付きの [text] 属性は、デベロッパーのみを対象とする「ツールテキスト」の属性です。
  3. TextView のツールテキストを「1」に設定します(サイコロを振って 1 の目が出たと仮定します)。この「1」は Android Studio 内の Design Editor にのみ表示され、実際のデバイスやエミュレータでアプリを実行するときには表示されません。

このテキストはアプリ デベロッパーにのみ表示されるため、文字列リソースを作成する必要はありません。

  1. プレビューでアプリを確認します。「1」が表示されます。

  1. アプリを実行します。エミュレータ上でアプリを実行すると、次のようになります。「1」は表示されません。これは正しい動作です。

これで、レイアウトの変更が完了しました。

アプリにボタンは付いていますが、このボタンをタップしても何も起こりません。これを変えるには、ボタンがタップされるとサイコロを振って画面を更新する Kotlin コードを作成する必要があります。

この変更を行うには、Android アプリの構成についてもう少し詳しく理解する必要があります。

Activity により、アプリが UI を描画するウィンドウが用意されます。通常、Activity は実行中のアプリの画面全体に表示されます。各アプリには 1 つ以上のアクティビティがあります。最上位または最初のアクティビティは MainActivity と呼ばれ、プロジェクト テンプレートで提供されます。たとえば、ユーザーがデバイス上のアプリのリストをスクロールして「Dice Roller」のアプリアイコンをタップすると、Android システムはアプリの MainActivity を起動します。

MainActivity コードで、Activity のレイアウトの詳細と、ユーザーがレイアウトを操作する方法を指定する必要があります。

  • 誕生日カードアプリには、誕生日のメッセージと画像を表示する Activity が 1 つあります。
  • Dice Roller アプリには、作成した TextViewButton のレイアウトを表示する Activity が 1 つあります。

より複雑なアプリでは、複数の画面と Activity が存在する場合があります。各 Activity には特定の目的があります。

たとえば、写真ギャラリー アプリでは、写真のグリッドを表示するための Activity、個々の写真を表示するための 2 番目の Activity、個々の写真を編集するための 3 番目の Activity を用意できます。

MainActivity.kt ファイルを開く

ボタンタップに応答するコードを MainActivity に追加します。これを正しく行うには、アプリにすでに存在する MainActivity コードについて理解を深める必要があります。

  1. MainActivity.kt ファイル([app] > [java] > [com.example.diceroller] > [MainActivity.kt])に移動して開きます。次のように表示されます。import... が表示された場合は、... をクリックしてインポートを展開します。
package com.example.diceroller

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {

   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)
   }
}

上記のコードの個々の単語をすべて理解する必要はありませんが、概要は理解しておく必要があります。Android コードを使うほど、コードに慣れて理解が深まります。

  1. Kotlin コードの MainActivity クラスを確認します。これはキーワード class と名前で識別できます。
class MainActivity : AppCompatActivity() {
    ...
}
  1. MainActivity には main() 関数がありません。

    以前、すべての Kotlin プログラムに main() 関数が必要であるということを学習しました。Android アプリの動作は異なります。main() 関数を呼び出す代わりに、アプリの初回起動時に Android システムが MainActivityonCreate() メソッドを呼び出します。
  2. 下記のような onCreate() メソッドのコードを見つけます。
   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)
   }

override については、後の Codelab で説明します(この段階では気にしないでください)。onCreate() メソッドの残りの部分では、インポートのコードを使用し、setContentView() で開始レイアウトを設定することにより、MainActivity を設定しています。

  1. import で始まる行に注目してください。

Android には、Android アプリを容易に記述できる多数のクラスのフレームワークが用意されていますが、どのクラスを指しているのかを Android に正確に伝える必要があります。コード内で使用するフレームワークのクラスを指定するには、import ステートメントを使用します。たとえば、Button クラスは android.widget.Button で定義されています。

自動インポートを有効にする

多くのクラスを使用する場合、忘れずに import ステートメントを追加するのが困難になる場合があります。幸いなことに、Android Studio では、他のクラスで提供されるクラスを使用するときに、適切なインポートを選択できるようになっています。このステップでは、Android Studio で可能な場合に自動的にインポートを追加し、使用していないインポートをコードから自動的に削除するように設定します。

  1. Android Studio で [File] > [Other Settings] > [Preferences for New Project] に移動し、設定を開きます。
  2. [Other Settings] > [Auto Import] を展開します。[Java] と [Kotlin] セクションで、[Add unambiguous imports on the fly] と [Optimize imports on the fly (for current project)] のチェックボックスがオンになっていることを確認します。セクションごとにチェックボックスが 2 つあることに注意してください。

    [Add unambiguous imports on the fly] の設定をオンにすると、使用する import ステートメントが判断可能な場合、import ステートメントが自動的に追加されます。[Optimize imports on the fly (for current project)] の設定をオンにすると、コードで使用されていないインポートがすべて削除されます。
  3. [OK] を押して、変更を保存し、設定を閉じます。

MainActivity について少し詳しく学んだところで、今度は Button をクリックすると画面上でなんらかの動作が行われるようにアプリを修正します。

ボタンがクリックされたときにメッセージを表示する

このステップでは、ボタンがクリックされたときに、画面の下部に簡単なメッセージを表示するように設定します。

  1. onCreate() メソッドの setContentView() 呼び出しの後に、次のコードを追加します。findViewById() メソッドは、レイアウト内の Button を検出します。R.id.button は、Button のリソース ID で、一意の識別子です。このコードは、Button オブジェクト自体ではなく、Button オブジェクトへの参照rollButton という変数に保存します。
val rollButton: Button = findViewById(R.id.button)

このコードは、Button オブジェクト自体ではなく、Button オブジェクトへの参照を rollButton という変数に保存します。

onCreate() メソッドは次のようになります。

override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)
   setContentView(R.layout.activity_main)

   val rollButton: Button = findViewById(R.id.button)
}
  1. Android Studio が Buttonimport ステートメントを自動的に追加したことを確認します。
    現在 3 つの import ステートメントがありますが、3 つ目のステートメントは自動的に追加されたものです。
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button

次に、コードを Button に関連付けて、Button がタップされたときにコードを実行できるようにする必要があります。クリック リスナーとは、タップやクリックの発生時に行う処理が記述されたコードです。これは、ユーザーが(この場合は Button)をクリックするのを単に「リッスン」するためのコードと考えることができます。

  1. rollButton オブジェクトを使用し、setOnClickListener() メソッドを呼び出してクリック リスナーを設定します。
rollButton.setOnClickListener {
}


Android Studio では、文字を入力すると複数の候補が表示されることがあります。この場合は、setOnClickListener {...} オプションを選択します。

中かっこ内には、ボタンがタップされたときに行う動作についての命令を記述します。ここでは、アプリで Toast(ユーザーに表示される簡単なメッセージ)を表示します。

  1. Toast.makeText() を呼び出して、"Dice Rolled!" というテキストを含む Toast を作成します。
val toast = Toast.makeText(this, "Dice Rolled!", Toast.LENGTH_SHORT)
  1. 次に、show() メソッドを呼び出して、そのテキストを表示するように Toast に指示します。
toast.show()

更新後の MainActivity クラスは次のようになります。package ステートメントと import ステートメントは、まだファイルの先頭にあります。

class MainActivity : AppCompatActivity() {

   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)

       val rollButton: Button = findViewById(R.id.button)
       rollButton.setOnClickListener {
           val toast = Toast.makeText(this, "Dice Rolled!", Toast.LENGTH_SHORT)
           toast.show()
       }
   }
}

クリック リスナーの 2 行は、変数を使わずに 1 行にまとめることもできます。これは他のコードで見られる一般的なパターンです。

Toast.makeText(this, "Dice Rolled!", Toast.LENGTH_SHORT).show()
  1. アプリを実行し、[Roll] ボタンをクリックします。トースト メッセージが画面の下部にポップアップ表示され、しばらくすると消えます。

これで、ボタンをクリックするとメッセージがポップアップ表示されるようになりました。今回、初めて Android 用の Kotlin コードを記述したことになります。

ボタンがクリックされたときに TextView を更新する

一時的な Toast メッセージを表示する代わりに、[Roll] ボタンがクリックされたときに画面上の TextView を更新するコードを記述します。

  1. activity_main.xml に戻ります([app] > [res] > [layout] > [activity_main.xml])。
  2. [TextView] をクリックします。
  3. [id] は [textView] です。
  4. MainActivity.kt を開きます([app] > [java] > [com.example.diceroller] > [MainActivity.kt])。
  5. Toast を作成して表示するコード行を削除します。
rollButton.setOnClickListener {
  
}
  1. 代わりに、resultTextView という新しい変数を作成して、TextView を格納します。
  2. findViewById() を使用して、ID でレイアウト内の textView を見つけて、それに対する参照を格納します。
val resultTextView: TextView = findViewById(R.id.textView)
  1. resultTextView のテキストを「6」に設定し、引用符で囲みます。
resultTextView.text = "6"

これは、[Attributes] の [text] を設定したときに行った操作に似ていますが、コード内で設定する場合は二重引用符で囲む必要があります。ここではテキストを明示的に設定しているため、TextView は常に 6 を表示します。次のタスクで、サイコロを振ってさまざまな値を表示するコードを追加します。

MainActivity クラスは次のようになります。

class MainActivity : AppCompatActivity() {

   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)

       val rollButton: Button = findViewById(R.id.button)
       rollButton.setOnClickListener {
           val resultTextView: TextView = findViewById(R.id.textView)
           resultTextView.text = "6"
       }
   }
}
  1. アプリを実行してボタンをクリックすると、TextView が「6」に更新されるはずです。

あとは、実際にサイコロを振る処理だけが必要です。前の Codelab で使用した Dice クラスを再利用すれば、サイコロを振るためのロジックを処理できます。

Dice クラスを追加する

  1. MainActivity クラスの最後の中かっこの後に、roll() メソッドを含む Dice クラスを作成します。
class Dice(val numSides: Int) {

   fun roll(): Int {
       return (1..numSides).random()
   }
}
  1. numSides にグレーの波線で下線が引かれます(表示されるまでしばらく時間がかかる場合があります)。
  2. numSides にカーソルを合わせると、「Property 'numSides' could be private」というポップアップが表示されます。

numSidesprivate としてマークすると、Dice クラス内でのみアクセスできるようになります。numSides を使用するコードは Dice クラス内にしかないため、この引数を Dice クラス用に private に設定してもかまいません。次のユニットで、private 変数と public 変数について詳しく学習します。

  1. そのまま [Make 'numSides' 'private'] をクリックして、Android Studio から提案された修正を加えます。

rollDice() メソッドを作成する

Dice クラスをアプリに追加したので、使用できるように MainActivity を更新します。コードを適切に整理するために、サイコロを振ることに関するすべてのロジックを 1 つの関数にまとめます。

  1. クリック リスナーでテキストを「6」に設定しているコードを、rollDice() の呼び出しに置き換えます。
rollButton.setOnClickListener {
   rollDice()
}
  1. rollDice() がまだ定義されていないため、Android Studio でエラーとなり、rollDice() が赤色で表示されます。
  2. rollDice() にカーソルを合わせると、問題といくつかの解決策が表示されます。

  1. [More actions...] をクリックするとメニューが表示され、そこから他のアクションを行うことができます。

  1. [Create function 'rollDice'] を選択します。Android Studio により、MainActivity 内の関数に空の定義が作成されます。
private fun rollDice() {
    TODO("Not yet implemented")
}

Dice の新しいオブジェクト インスタンスを作成する

このステップでは、rollDice() メソッドでサイコロを作成し、サイコロを振り、その結果を TextView に表示します。

  1. rollDice() 内で、TODO() 呼び出しを削除します。
  2. 6 面のサイコロを作成するコードを追加します。
val dice = Dice(6)
  1. roll() メソッドを呼び出してサイコロを振り、その結果を diceRoll という変数に保存します。
val diceRoll = dice.roll()
  1. findViewById() を呼び出して TextView を見つけます。
val resultTextView: TextView = findViewById(R.id.textView)

変数 diceRoll は数値ですが、TextView はテキストを使用します。diceRolltoString() メソッドを使用すると、文字列に変換できます。

  1. diceRoll を文字列に変換し、その文字列を使用して resultTextView のテキストを更新します。
resultTextView.text = diceRoll.toString()

rollDice() メソッドは次のようになります。

private fun rollDice() {
    val dice = Dice(6)
    val diceRoll = dice.roll()
    val resultTextView: TextView = findViewById(R.id.textView)
    resultTextView.text = diceRoll.toString()
}
  1. アプリを実行します。サイコロの出目の結果が 6 以外の値に変わることを確認します。出目は 1 から 6 までの乱数であるため、値が 6 になることもあります。

想定どおりの結果が出れば、メソッドは正しく動作しています。

アプリを動作させるためにコードのあちこちを調整した結果、コードの見た目が多少乱雑になるのはよくあることです。ただし、コードの編集を終える前に、簡単なクリーンアップ タスクを実行することをおすすめします。そうすることでアプリが良好な状態になり、今後のメンテナンスもしやすくなります。

プロの Android デベロッパーは、コードを作成する際に習慣としてクリーンアップを実践しています。

Android スタイルガイド

チームで作業を行う際には、コード間で一貫性が保たれるように、全員が同様の方法でコードを記述することをおすすめします。そのために、Android には、Android コードの記述方法(命名規則、形式、他のおすすめの方法など)をまとめたスタイルガイドが用意されています。Android コードの記述にあたっては、Android デベロッパー向けの Kotlin スタイルガイドのガイドラインに従ってください。

次に、スタイルガイドに沿ってコードを作成する方法をいくつか紹介します。

コードをクリーンアップする

コードを圧縮する

コードの行数を減らすことで、コードを簡略化できます。例として、Button にクリック リスナーを設定するコードを以下に示します。

rollButton.setOnClickListener {
    rollDice()
}

クリック リスナーの命令は 1 行だけなので、rollDice() メソッド呼び出しと中かっこをすべて 1 行にまとめることができます。次のように、3 行から 1 行に圧縮できます。

rollButton.setOnClickListener { rollDice() }

コードを再フォーマットする

次に、コードの形式を Android の推奨コード形式に合わせて再フォーマットします。

  1. MainActivity.kt クラスで、Windows のキーボード ショートカット Control+A(Mac の場合は Command+A)を使用して、ファイル内のすべてのテキストを選択します。または、Android Studio のメニューの [Edit] > [Select All] で選択することもできます。
  2. ファイル内のすべてのテキストを選択した状態で、Android Studio のメニューで [Code] > [Reformat Code] を選択するか、キーボード ショートカット Ctrl+Alt+L(Mac の場合は Command+Option+L)を使用します。

これにより、空白文字やインデントなど、コードの形式が更新されます。変化がなくても問題ありません。その場合、コードはすでに正しい形式になっています。

コードにコメントを追加する

作成したコードの機能や意図を説明するために、コードにコメントを追加します。コードが複雑になるにつれて、コードをそのように記述した理由を書き留めておくことが重要になります。後でコードを見直して変更を加える場合、コードの機能は明確に覚えていても、コードをそのように記述した理由は思い出せない可能性があります。

一般的には、クラス(このアプリで使用するクラスは MainActivityDice のみ)とメソッドごとにコメントを追加します。コメントの先頭と末尾に /****/ の記号を使用すると、それがコードではないことをシステムに示すことができます。システムがコードを実行する際、これらの行は無視されます。

クラスに関するコメントの例:

/**
* This activity allows the user to roll a dice and view the result
* on the screen.
*/
class MainActivity : AppCompatActivity() {

メソッドに関するコメントの例:

/**
* Roll the dice and update the screen with the result.
*/
private fun rollDice() {

メソッド内にも、コードが読みやすくなるのであればコメントを自由に追加できます。コメントの先頭には // 記号を使用します。行の // 記号の後はすべてコメントと見なされます。

メソッド内の 2 つのコメントの例:

private fun rollDice() {
   // Create new Dice object with 6 sides and roll it
   val dice = Dice(6)
   val diceRoll = dice.roll()

   // Update the screen with the dice roll
   val resultTextView: TextView = findViewById(R.id.textView)
   resultTextView.text = diceRoll.toString()
}
  1. 実際にコードにコメントを追加してみてください。
  2. このようにコメントの追加や形式の変更を行った後には、アプリを再度実行し、想定どおりに動作するか確認することをおすすめします。

コメント方法のご参考までに、解答コードをご覧ください。

この Codelab の解答コードは、以下に示すプロジェクトとモジュールにあります。

この Codelab のコードを GitHub から取得して Android Studio で開く手順は次のとおりです。

  1. Android Studio を起動します。
  2. [Welcome to Android Studio] ウィンドウで [Check out project from version control] をクリックします。
  3. [Git] を選択します。

  1. [Clone Repository] ダイアログで、提供されたコードの URL を [URL] ボックスに貼り付けます。
  2. [テスト] ボタンをクリックし、「接続しました」という緑色のポップアップ バブルがあることを確認します。
  3. 必要に応じて、[Directory] を推奨されるデフォルトとは異なるものに変更します。

  1. [Clone] をクリックします。Android Studio がコードの取得を開始します。
  2. [Checkout from Version Control] ポップアップで [Yes] をクリックします。

  1. Android Studio が開くまで待ちます。
  2. Codelab のスターター コードまたは解答コードに適したモジュールを選択します。

  1. 実行ボタン をクリックして、コードをビルドして実行します。
  • Layout Editor を使用して Android アプリに Button を追加します。
  • MainActivity.kt クラスを変更して、アプリにインタラクティブな動作を追加します。
  • 試しに Toast メッセージをポップアップして、正しく機能することを確認してください。
  • setOnClickListener() を使用して Button に on-click リスナーを設定し、Button がクリックされたときの動作を追加します。
  • アプリの実行中に、レイアウト内の TextViewButton などの UI 要素のメソッドを呼び出して、画面を更新できます。
  • コードにコメントを書くことで、他のデベロッパーがコードを読むときに作成者の意図を理解しやすくなります。
  • コードの再フォーマットとクリーンアップを行います。

次のことを行います。

  1. アプリにもう 1 つサイコロを追加します。[Roll] ボタンを押すと 2 つのサイコロが振られ、結果が 2 つの異なる TextViews で画面に表示されるようにします。

確認:

完成したアプリがエラーなく実行でき、アプリに 2 つのサイコロが表示されるはずです。