通知系のGUIコンポーネントは、ユーザーに情報を提示し、必要に応じてユーザーに応答してもらうために表示します。
カリキュラムのサンプル コードは、「GUIコンポーネントを含むJavaコードの実行」に示す手順で実行して確認できます。 なおButtonの作成方法については、「Buttonの表示」に示す手順を実行します。Dialog
Dialogは、必ずユーザーに読んで欲しい内容や、選択しないと次へ進めない場合に使用します。次のように表示されます。
「3.1 Android StuidioによるAndroidプロジェクトの作成」で「MainActivity.java」を作成し、「5.1 デザインエディタの操作方法」の「Buttonの表示」に従い「MainActivity.java」や「activity_main.xml」を変更します。
作成したButtonが押されるとDialogを表示します。次のようにJavaコードを「MainActivity.java」に追加します。
ボタン「OK」のクリックに応じて処理を行う場合は、イベントリスナとボタンを関連付けるために、「OnClickListener」インタフェースを利用します。「OnClickListener」インタフェースにはコールバックメソッドとして「onClick」メソッドが定義されており、ボタンがクリックされたときにイベントが発生して、「onClick」メソッドが呼ばれます。
Dialogの表示には、AlertDialogを使用します。AlertDialogは、タイトル、最大 3 つのボタン、選択可能なアイテムの一覧が表示できます。
MainActivity.java
package com.example.myapplication;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener { // #①
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ボタンの取得
Button button = (Button) findViewById(R.id.btn_ok);
// リスナーの登録
button.setOnClickListener((View.OnClickListener) this); // #➁
}
@Override
public void onClick(View v) { // #③
if (v.getId() == R.id.btn_ok) { // #④
new AlertDialog.Builder(MainActivity.this) // #⑤
.setTitle("Hello, Dialog!") // #⑥
.setMessage("Want to try again?") // #⑦
.setPositiveButton( // #⑧
"Yes", // #⑨
new DialogInterface.OnClickListener() { // #⑩
@Override
public void onClick(DialogInterface dialog, int which) { // #⑪
Toast.makeText(MainActivity.this, "Yesが押されました!", Toast.LENGTH_LONG).show(); // #⑫
}
})
.setNegativeButton( // #⑬
"No", // #⑭
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "Noが押されました!", Toast.LENGTH_LONG).show(); // #⑮
}
})
.show();
}
}
}
- #①は、「OnClickListener」インタフェースを「MainActivity」クラスに「implements」して実装する
- #➁は、ボタンが押されたときに発生したイベントを受け取るイベントリスナを、「setOnClickListener」メソッドを使って関連付ける。パラメータの「this」は「OnClickListener」を示し、オブジェクト自身「=MainActivity」の参照を表す
- #③は、ボタンが押されたとき、発生したイベントを受け取る「OnClick」を定義する
- #④は、Viewクラスの「getId」メソッドを使うことで呼び出し元のビューの識別子を取得し、レイアウトの定義時にボタンに設定した識別子と照らし合わせ、押されたボタンごとに異なる処理をさせる
- #⑤は、AlertDialogをオブジェクト化する
- #⑥は、タイトル「Hello, Dialog!」を設定する
- #⑦は、メッセージ「Want to try again?」を設定する
- #⑧は、肯定ボタンを設定する
- #⑨は、ボタン名「Yes」を設定する
- #⑩は、肯定ボタンが押されたときに発生したイベントを受け取るイベントリスナを、「DialogInterface.OnClickListener」メソッドを使って関連付ける
- #⑪は、ボタンが押されたとき、発生したイベントを受け取る「OnClick」を定義する
- #⑫は、「Yesが押されました!」を表示する
- #⑬は、否定ボタンを設定する
- #⑭は、ボタン名「No」を設定する
- #⑮は、「Noが押されました!」を表示する
作成したJavaコードを実行すると、AndroidエミュレータにButtonが表示されるので、表示されているButtonをクリックします。次のようにダイアログが表示されるので、「Yes」ボタンを押します。
Androidエミュレータに「Yesが押されました!」が表示されます。
Snackbar
Snackbarは、画面の下部に出力するメッセージで、1 つだけアクションを持つことができます。アクションがあってもなくてもしばらくしたら自動で消えます。次のように表示されます。
「3.1 Android StuidioによるAndroidプロジェクトの作成」で「MainActivity.java」を作成し、「5.1 デザインエディタの操作方法」の「Buttonの表示」に従い「MainActivity.java」や「activity_main.xml」を変更します。
作成したButtonが押されるとSnackbarを表示します。次のようにJavaコードを「MainActivity.java」に追加します。
ボタン「OK」のクリックに応じて処理を行う場合は、イベントリスナとボタンを関連付けるために、「OnClickListener」インタフェースを利用します。「OnClickListener」インタフェースにはコールバックメソッドとして「onClick」メソッドが定義されており、ボタンがクリックされたときにイベントが発生して、「onClick」メソッドが呼ばれます。
Snackbar のメッセージ テキストの横にボタンを表示すると、ユーザーからのアクションに対応可能となります。
MainActivity.java
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.google.android.material.snackbar.Snackbar;
public class MainActivity extends AppCompatActivity implements View.OnClickListener { // #①
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ボタンの取得
Button button = (Button) findViewById(R.id.btn_ok);
// リスナーの登録
button.setOnClickListener((View.OnClickListener) this); // #➁
}
@Override
public void onClick(View v) { // #③
// ボタンが押された場合
if (v.getId() == R.id.btn_ok) { // #④
Snackbar.make(v, "Hello, Snackbar!", Snackbar.LENGTH_SHORT) // #⑤
.setAction("Yes", new View.OnClickListener() { // #⑥
@Override
public void onClick(View v) { // #⑦
Toast.makeText(MainActivity.this, "Yesが押されました!", Toast.LENGTH_LONG).show(); // #⑧
}
})
.show(); // #⑨
}
}
}
- #①は、「OnClickListener」インタフェースを「MainActivity」クラスに「implements」して実装する
- #➁は、ボタンが押されたときに発生したイベントを受け取るイベントリスナを、「setOnClickListener」メソッドを使って関連付ける。パラメータの「this」は「OnClickListener」を示し、オブジェクト自身「=MainActivity」の参照を表す
- #③は、ボタンが押されたとき、発生したイベントを受け取る「OnClick」を定義する。
- #④は、Viewクラスの「getId」メソッドを使うことで呼び出し元のビューの識別子を取得し、レイアウトの定義時にボタンに設定した識別子と照らし合わせ、押されたボタンごとに異なる処理をさせる。
- #⑤は、Snackbarを作成する
- #⑥は、アクションを定義し、ボタン名「Yes」を設定する
- #⑦は、ボタンが押されたとき、発生したイベントを受け取る「OnClick」を定義する
- #⑧は、「Yesが押されました!」を設定する
- #⑨は、設定した内容を表示する
作成したJavaコードを実行すると、AndroidエミュレータにButtonが表示されるので、表示されているButtonをクリックします。次のようにSnackbarが表示されるので、「YES」ボタンを押します。
Androidエミュレータに「Yesが押されました!」が表示されます。
本節の説明は以上になります。