この Codelab は、Android Kotlin の基礎コースの一部です。このコースを最大限に活用するには、Codelab を順番に進めることをおすすめします。コースのすべての Codelab は、Android Kotlin の基礎の Codelab のランディング ページに一覧表示されています。
前提となる知識
- Kotlin で基本的な Android アプリを作成します。
- エミュレータまたはデバイスで Android アプリを実行する。
- Android Studio の Layout Editor を使用してリニア レイアウトを作成する。
LinearLayout、TextView、ScrollView、クリック ハンドラ付きのボタンを使用するシンプルなアプリを作成します。
学習内容
EditTextビューを使用してユーザー入力を取得する方法。EditTextビューのテキストを使用してTextViewビューにテキストを設定する方法。ViewとViewGroupの使用方法。Viewの公開設定を変更する方法。
演習内容
- 以前の Codelab で作成した AboutMe アプリにインタラクティブ機能を追加します。
- ユーザーがテキストを入力できるように
EditTextを追加します。 Buttonを追加して、クリック ハンドラを実装します。
この Codelab では、AboutMe アプリを拡張してユーザー インタラクションを追加します。ニックネーム フィールド、[完了] ボタン、ニックネームを表示するテキスト ビューを追加します。ユーザーがニックネームを入力して [DONE] ボタンをタップすると、テキスト ビューが更新され、入力されたニックネームが表示されます。テキスト ビューをタップすると、ニックネームを再度更新できます。
|
|
このタスクでは、ユーザーがニックネームを入力できるように EditText 入力フィールドを追加します。
ステップ 1: 開始する
- 前の Codelab で作成した AboutMe アプリがまだない場合は、スターター コード AboutMeInteractive-Starter をダウンロードします。これは、前の Codelab で完成させたコードと同じです。
- Android Studio で AboutMeInteractive-Starter プロジェクトを開きます。
- アプリを実行します。名前のテキスト ビュー、星の画像、長いテキストのセグメントがスクロール ビューに表示されます。

ユーザーがテキストを変更できないことに注意してください。
ユーザーがアプリを操作できる(テキストを入力できるなど)と、アプリはより興味深いものになります。テキスト入力を受け付けるために、Android には「編集テキスト」と呼ばれるユーザー インターフェース(UI)ウィジェットが用意されています。TextView のサブクラスである EditText を使用して、編集テキストを定義します。編集テキストを使用すると、ユーザーはテキスト入力を入力および変更できます(下のスクリーンショットを参照)。

ステップ 2: EditText を追加する
- Android Studio で、[Design] タブの
activity_main.xmlレイアウト ファイルを開きます。 - [Palette] ペインで [Text] をクリックします。

[Ab TextView](TextView)が、[Palette] ペインのテキスト要素のリストの上部に表示されます。[Ab TextView] の下には、複数のEditTextビューがあります。
[Palette] ペインで、TextViewのアイコンに下線なしの文字 Ab が表示されていることを確認してください。ただし、EditTextアイコンでは Ab に下線が引かれています。下線は、ビューが編集可能であることを示します。
Android はEditTextビューごとに異なる属性を設定し、システムは適切なソフト入力方法(画面キーボードなど)を表示します。 - [PlainText] 編集テキストを [Component Tree] にドラッグし、
name_textの下、star_imageの上に配置します。
- [属性 ] ペインを使用して、
EditTextビューに次の属性を設定します。
属性 | 値 |
|
|
|
|
|
|
- アプリを実行します。星の画像の上に、デフォルトのテキスト「Name」を含む編集テキストが表示されます。

このタスクでは、ヒントの追加、テキストの配置の変更、スタイルを NameStyle に変更、入力タイプの設定を行って、EditText ビューのスタイルを設定します。
ステップ 1: ヒントテキストを追加する
string.xmlファイルにヒント用の新しい文字列リソースを追加します。
<string name="what_is_your_nickname">What is your Nickname?</string>- [属性 ] ペインを使用して、
EditTextビューに次の属性を設定します。
属性 | 値 |
|
|
|
|
|
|
- [属性] ペインで、
text属性からName値を削除します。ヒントを表示するには、text属性の値を空にする必要があります。
ステップ 2: inputType 属性を設定する
inputType 属性は、ユーザーが EditText ビューに入力できる入力のタイプを指定します。Android システムは、設定された入力タイプに応じて、適切な入力フィールドと画面キーボードを表示します。
使用可能な入力タイプをすべて表示するには、[属性] ペインで inputType フィールドをクリックするか、フィールドの横にある 3 つのドット ... をクリックします。使用できる入力タイプがすべて表示されたリストが開きます。現在アクティブな入力タイプにはチェックマークが付いています。複数の入力タイプを選択できます。

たとえば、パスワードの場合は textPassword 値を使用します。テキスト フィールドでユーザーの入力が隠されます。

電話番号の場合は、phone 値を使用します。数字キーパッドが表示され、ユーザーは数字のみを入力できます。

ニックネーム フィールドの入力タイプを設定します。
nickname_edit編集テキストのinputType属性をtextPersonNameに設定します。- [Component Tree] ペインに、
autoFillHintsの警告が表示されます。この警告はこのアプリには適用されず、この Codelab の範囲外であるため、無視してかまいません。(自動入力について詳しくは、自動入力用にアプリを最適化するをご覧ください)。
- [属性 ] ペインで、
EditTextビューの次の属性の値を確認します。
属性 | 値 |
|
|
|
|
|
|
|
|
|
|
|
|
| (空) |
Button は、ユーザーがタップしてアクションを実行できる UI 要素です。ボタンは、テキスト、アイコン、またはテキストとアイコンの両方で構成できます。

このタスクでは、ユーザーがニックネームを入力した後にタップする [完了] ボタンを追加します。ボタンを押すと、EditText ビューがニックネームを表示する TextView ビューに切り替わります。ニックネームを更新するには、ユーザーが TextView ビューをタップします。
ステップ 1: [完了] ボタンを追加する
- [Palette] ペインから [Component Tree] にボタンをドラッグします。ボタンを
nickname_edit編集テキストの下に配置します。

doneという名前の新しい文字列リソースを作成します。文字列にDoneの値を指定します。
<string name="done">Done</string>- [属性] ペインを使用して、新しく追加した
Buttonビューに次の属性を設定します。
属性 | 値 |
|
|
|
|
|
|
|
|
layout_gravity 属性は、ビューを親レイアウト LinearLayout の中央に配置します。
- スタイルを
Widget.AppCompat.Button.Coloredに変更します。これは、Android が提供する事前定義されたスタイルの 1 つです。スタイルは、プルダウン メニューまたは [Resources] ウィンドウから選択できます。
このスタイルでは、ボタンの色がアクセント カラーcolorAccentに変わります。アクセント カラーはres/values/colors.xmlファイルで定義されます。
colors.xml ファイルには、アプリのデフォルトの色が含まれています。アプリの要件に基づいて、新しい色リソースを追加したり、プロジェクト内の既存の色リソースを変更したりできます。
colors.xml ファイルのサンプル:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#008577</color>
<color name="colorPrimaryDark">#00574B</color>
<color name="colorAccent">#D81B60</color>
</resources>ステップ 2: [完了] ボタンのスタイルを設定する
- [属性] ペインで、[Layout_Margin > Top] を選択して上マージンを追加します。上余白を
dimens.xmlファイルで定義されているlayout_marginに設定します。
- プルダウン メニューから
fontFamily属性をrobotoに設定します。
- [Text] タブに切り替えて、新しく追加したボタンの生成された XML コードを確認します。
<Button
android:id="@+id/done_button"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/layout_margin"
android:fontFamily="@font/roboto"
android:text="@string/done" />ステップ 3: カラーリソースを変更する
このステップでは、アクティビティのアプリバーに合わせてボタンのアクセント カラーを変更します。
res/values/colors.xmlを開き、colorAccentの値を#76bf5eに変更します。
<color name="colorAccent">#76bf5e</color>ファイル エディタの左の余白に、16 進コードに対応する色が表示されます。

デザイン エディタでボタンの色が変更されていることを確認します。
- アプリを実行します。編集テキストの下に、スタイルが設定された [完了] ボタンが表示されます。

ユーザーがニックネームを入力して [完了] ボタンをタップすると、ニックネームが TextView ビューに表示されます。このタスクでは、色付きの背景を持つテキストビューを追加します。テキスト ビューには、star_image の上にユーザーのニックネームが表示されます。
ステップ 1: ニックネーム用の TextView を追加する
- [Palette] ペインから [Component Tree] にテキスト ビューをドラッグします。テキストビューを
done_buttonの下、star_imageの上に配置します。
- [属性] ペインを使用して、新しい
TextViewビューに次の属性を設定します。
属性 | 値 |
|
|
|
|
|
|
ステップ 2: TextView の可視性を変更する
アプリでのビューの表示と非表示は、visibility 属性を使用して切り替えることができます。この属性には、次の 3 つの値のいずれかを指定します。
visible: ビューが表示されます。Invisible: ビューを非表示にしますが、ビューはレイアウト内のスペースを占有したままになります。gone: ビューを非表示にします。ビューはレイアウト内のスペースを占有しません。
- [属性] ペインで、
nickname_textテキストビューのvisibilityをgoneに設定します。これは、アプリでこのテキストビューを最初に表示しないようにするためです。
[属性] ペインで属性を変更すると、nickname_textビューがデザイン エディタから消えます。ビューはレイアウト プレビューで非表示になります。 nickname_textビューのtext属性の値を空の文字列に変更します。
この TextView 用に生成された XML コードは次のようになります。
<TextView
android:id="@+id/nickname_text"
style="@style/NameStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
android:visibility="gone"
android:text="" />レイアウトのプレビューは次のようになります。

Button オブジェクト(または任意のビュー)のクリック ハンドラは、ボタン(ビュー)がタップされたときに実行されるアクションを指定します。クリック イベントを処理する関数は、ボタン(ビュー)を含むレイアウトをホストする Activity で実装する必要があります。
クリック リスナーの一般的な形式は次のとおりです。ここで、渡されるビューはクリックまたはタップを受け取ったビューです。
private fun clickHandlerFunction(viewThatIsClicked: View) {
// Add code to perform the button click event
}クリック リスナー関数をボタンのクリック イベントにアタッチするには、次の 2 つの方法があります。
- XML レイアウトで、
android:onClick属性を<Button>要素に追加できます。次に例を示します。
<Button
android:id="@+id/done_button"
android:text="@string/done"
...
android:onClick="clickHandlerFunction"/>または
- これは、
ActivityのonCreate()でsetOnClickListenerを呼び出すことで、実行時にプログラムで行うことができます。次に例を示します。
myButton.setOnClickListener {
clickHanderFunction(it)
}このタスクでは、done_button のクリック リスナーをプログラムで追加します。クリック リスナーは、対応するアクティビティ(MainActivity.kt)に追加します。
クリック リスナー関数 addNickname は次の処理を行います。
nickname_edit編集テキストからテキストを取得します。nickname_textテキストビューにテキストを設定します。- 編集テキストとボタンを非表示にします。
- ニックネーム
TextViewを表示します。
ステップ 1: クリック リスナーを追加する
- Android Studio の
javaフォルダで、MainActivity.ktファイルを開きます。 MainActivity.ktのMainActivityクラス内に、addNicknameという関数を追加します。View型のviewという入力パラメータを含めます。viewパラメータは、関数が呼び出されるViewです。この場合、viewは [完了] ボタンのインスタンスになります。
private fun addNickname(view: View) {
}addNickname関数内でfindViewById()を使用して、nickname_edit編集テキストとnickname_textテキスト ビューへの参照を取得します。
val editText = findViewById<EditText>(R.id.nickname_edit)
val nicknameTextView = findViewById<TextView>(R.id.nickname_text)nicknameTextViewテキストビューのテキストを、editTextでユーザーが入力したテキストに設定します。このテキストはtextプロパティから取得します。
nicknameTextView.text = editText.texteditTextのvisibilityプロパティをView.GONEに設定して、ニックネームのEditTextビューを非表示にします。
前のタスクでは、レイアウト エディタを使用して visibility プロパティを変更しました。ここでは、同じことをプログラムで行います。
editText.visibility = View.GONEvisibilityプロパティをView.GONEに設定して、[完了] ボタンを非表示にします。ボタンの参照は、関数の入力パラメータviewとしてすでに存在します。
view.visibility = View.GONEaddNickname関数の最後に、ニックネームTextViewビューのvisibilityプロパティをView.VISIBLEに設定して、ビューを表示します。
nicknameTextView.visibility = View.VISIBLEステップ 2: [DONE] ボタンにクリック リスナーを追加する
[完了] ボタンがタップされたときに実行されるアクションを定義する関数を作成したので、この関数を Button ビューに関連付ける必要があります。
MainActivity.ktで、onCreate()関数の最後に、DONEButtonビューへの参照を取得します。findViewById()関数を使用して、setOnClickListenerを呼び出します。クリック リスナー関数addNickname()への参照を渡します。
findViewById<Button>(R.id.done_button).setOnClickListener {
addNickname(it)
}上記のコードでは、it は done_button を参照します。これは、引数として渡されるビューです。
- アプリを実行し、ニックネームを入力して [DONE] ボタンをタップします。編集テキストとボタンがニックネーム テキスト ビューに置き換えられていることに注目してください。
|
|
[完了] ボタンをタップした後もキーボードが表示されたままになっていることに注意してください。これはデフォルトの動作です。
ステップ 3: キーボードを非表示にする
このステップでは、ユーザーが [完了] ボタンをタップした後にキーボードを非表示にするコードを追加します。
MainActivity.ktのaddNickname()関数の末尾に、次のコードを追加します。このコードの仕組みについて詳しくは、hideSoftInputFromWindowドキュメントをご覧ください。
// Hide the keyboard.
val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)- アプリを再度実行します。[完了] をタップすると、キーボードが非表示になります。
|
|
[完了] ボタンをタップした後にユーザーがニックネームを変更することはできません。次のタスクでは、アプリのインタラクティブ性を高め、ユーザーがニックネームを更新できるように機能を追加します。
このタスクでは、ニックネームのテキストビューにクリック リスナーを追加します。クリック リスナーは、ニックネームのテキスト ビューを非表示にし、編集テキストを表示して、[完了] ボタンを表示します。
ステップ 1: クリック リスナーを追加する
MainActivityで、ニックネーム テキストビューにupdateNickname(view: View)というクリック リスナー関数を追加します。
private fun updateNickname (view: View) {
}updateNickname関数内で、nickname_edit編集テキストへの参照を取得し、[完了 ] ボタンへの参照を取得します。これを行うには、findViewById()メソッドを使用します。
val editText = findViewById<EditText>(R.id.nickname_edit)
val doneButton = findViewById<Button>(R.id.done_button)updateNickname関数の最後に、編集テキストを表示し、[完了] ボタンを表示し、テキストビューを非表示にするコードを追加します。
editText.visibility = View.VISIBLE
doneButton.visibility = View.VISIBLE
view.visibility = View.GONEMainActivity.ktのonCreate()関数の最後に、nickname_textテキストビューでsetOnClickListenerを呼び出します。クリック リスナー関数(updateNickname())への参照を渡します。
findViewById<TextView>(R.id.nickname_text).setOnClickListener {
updateNickname(it)
}- アプリを実行します。ニックネームを入力して [完了] ボタンをタップし、ニックネームの
TextViewビューをタップします。ニックネーム ビューが消え、編集テキストと [完了] ボタンが表示されます。
デフォルトでは、EditText ビューにフォーカスがなく、キーボードが表示されていないことに注意してください。ユーザーは、ニックネームのテキスト ビューがクリック可能であることを理解しにくい。次のタスクでは、ニックネームのテキストビューにフォーカスとスタイルを追加します。
ステップ 2: EditText ビューにフォーカスを設定してキーボードを表示する
updateNickname関数の最後に、EditTextビューにフォーカスを設定します。requestFocus()メソッドを使用します。
// Set the focus to the edit text.
editText.requestFocus()updateNickname関数の最後に、キーボードを表示するコードを追加します。
// Show the keyboard.
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(editText, 0)ステップ 3: ニックネーム TextView ビューに背景色を追加する
nickname_textテキスト ビューの背景色を@color/colorAccentに設定し、下部のパディングを@dimen/small_paddingに追加します。これらの変更は、ニックネームのテキスト ビューがクリック可能であることをユーザーに知らせるヒントとなります。
android:background="@color/colorAccent"
android:paddingBottom="@dimen/small_padding"- 最終的なアプリを実行します。編集テキストにフォーカスが設定され、ニックネームが編集テキストに表示され、ニックネームのテキスト ビューにスタイルが設定されます。
|
|
インタラクティブな AboutMe アプリを友達に見せてみましょう。
Android Studio プロジェクト: AboutMeInteractive
- Android Studio の Layout Editor ツールは、ビジュアル デザイン エディタです。Layout Editor を使用すると、UI 要素をレイアウトにドラッグして、アプリのレイアウトを作成できます。
EditTextは、ユーザーがテキストを入力および変更できる UI 要素です。Buttonは、ユーザーがタップしてアクションを実行できる UI 要素です。ボタンは、テキスト、アイコン、またはテキストとアイコンの両方で構成できます。
クリック リスナー
Viewにクリック リスナーを追加すると、タップに応答させることができます。- クリック リスナーを定義する関数は、クリックされた
Viewを受け取ります。
クリック リスナー関数を View にアタッチするには、次の 2 つの方法があります。
- XML レイアウトで、
android:onClick属性を<View>要素に追加します。 - プログラムで、対応する
ActivityでsetOnClickListener(View.OnClickListener)関数を使用します。
Udacity コース:
Android デベロッパー ドキュメント:
このセクションでは、インストラクター主導のコースの一環として、この Codelab に取り組んでいる生徒向けに考えられる宿題をいくつか示します。インストラクターは、以下のようなことを行えます。
- 必要に応じて宿題を与える
- 宿題の提出方法を生徒に伝える
- 宿題を採点する
インストラクターは、これらの提案を必要なだけ使用し、必要に応じて他の宿題も自由に与えることができます。
この Codelab に独力で取り組む場合は、これらの宿題を自由に使用して知識をテストしてください。
以下の質問に回答してください
問題 1
EditText は何のサブクラスですか?
ViewLinearLayoutTextViewButton
問題 2
次の visibility 属性値のうち、ビューに設定するとビューが非表示になり、レイアウト内の領域を占有しなくなるのは次のどれですか。
visibleInvisiblegonehide
問題 3
入力フィールドの妨げになるため、EditText でヒントを表示することは推奨されない。正誤問題
- 正しい
- 誤り
問題 4
Button ビューの説明として正しい文は次のうちどれですか。
Buttonビューはビューグループです。- 1 つの画面に配置できる
Buttonビューは 3 つだけです。 Buttonビューはクリック可能で、クリックすると、関連付けられたクリック リスナーがアクションを実行します。ButtonはImageViewの拡張です。
次のレッスンに進む:
このコースの他の Codelab へのリンクについては、Android Kotlin の基礎の Codelab のランディング ページをご覧ください。


(中央)
(中央)

