Android
 Computer >> コンピューター >  >> プログラミング >> Android

【Android】ダイアログの外側をタップして閉じる方法|setCanceledOnTouchOutsideの使い方

はじめに

本記事では、Androidアプリでダイアログの外側をタップしたときにダイアログを閉じる(または閉じないようにする)方法を解説します。鍵となるのは、AlertDialogクラスのsetCanceledOnTouchOutside()メソッドです。引数にtrueを渡せば外側タップでダイアログを閉じられ、falseを渡せば外側タップによるキャンセルを無効化できます。

手順1:新規プロジェクトを作成する

Android Studioを起動し、メニューから「File」→「New Project」を選択して、必要な項目を入力のうえ新しいプロジェクトを作成してください。

手順2:レイアウトファイルを編集する

res/layout/activity_main.xmlに以下のコードを記述します。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:gravity="center"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/click"
        android:layout_width="wrap_content"
        android:textSize="30sp"
        android:layout_height="wrap_content"
        android:text="Click"/>
</LinearLayout>

このレイアウトでは、画面中央に「Click」というテキストを表示するTextViewを1つ配置しています。このTextViewをタップするとダイアログが表示される仕組みです。

手順3:MainActivity.javaを編集する

src/MainActivity.javaに以下のコードを記述します。

package com.example.myapplication;
import android.annotation.TargetApi;
import android.content.DialogInterface;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    TextView text;
    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text = findViewById(R.id.click);
        text.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showAlertDialog();
            }
        });
    }
    private void showAlertDialog() {
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);
        alertDialog.setTitle("AlertDialog");
        alertDialog.setMessage("Sairamkrishna Mammahe do you wanna close it or not?");
        alertDialog.setIcon(R.drawable.logo);
        alertDialog.setPositiveButton("yes", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this,"you clicked on yes button",Toast.LENGTH_LONG).show();
            }
        });
        alertDialog.setNegativeButton("No", new DialogInterface.OnClickListener() {
            @Override
                public void onClick(DialogInterface dialog, int which) {
            }
        });
        AlertDialog alert = alertDialog.create();
        alert.setCanceledOnTouchOutside(false);
        alert.show();
    }
}

コードのポイント

  • setPositiveButton()setNegativeButton()により、「はい」「いいえ」の2つのボタンを持つダイアログを構築しています。「はい」を押すとトーストメッセージが表示されます。
  • 今回の核心はalert.setCanceledOnTouchOutside(false);の行です。falseを指定すると、ダイアログの外側をタップしてもダイアログは閉じなくなり、ボタンで明示的に操作する必要があります。
  • 逆に、外側をタップしてダイアログを閉じられるようにしたい場合は、alert.setCanceledOnTouchOutside(true);と指定してください。
  • なお、新規プロジェクトでは古いサポートライブラリではなく、androidx.appcompat.app.AlertDialogを使用することをおすすめします。

アプリを実行して動作を確認する

それではアプリを実行してみましょう。実機のAndroid端末をパソコンに接続している場合、Android Studioでプロジェクト内のアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックします。接続したデバイスを選択して実行すると、まず次のような初期画面が表示されます。

【Android】ダイアログの外側をタップして閉じる方法|setCanceledOnTouchOutsideの使い方

続いて、画面上のTextViewをタップすると、以下のようにAlertDialogが表示されます。外側をタップしたときの挙動がsetCanceledOnTouchOutside()の設定によって変化することを確認してみてください。

【Android】ダイアログの外側をタップして閉じる方法|setCanceledOnTouchOutsideの使い方


  1. 【Android】データベースとRecyclerViewを連携させる方法を実装例つきで解説

    この記事では、AndroidアプリでRecyclerViewとデータベース(SQLite)を連携させて使用する方法を、実際のサンプルコードとともに解説します。連絡先の登録・表示・編集・削除ができるシンプルなアプリを題材に、実装手順をステップごとに見ていきましょう。ステップ1:プロジェクトの作成と依存関係の追加まず、Android Studioで新しいプロジェクトを作成します。メニューから「File → New Project」を選択し、必要事項を入力してプロジェクトを作成してください。続いて、build.gradle(Module: app)に以下の依存関係を追加します。implementat

  2. NordVPNでNetflixを視聴する方法|海外リージョン制限を解除して楽しむ完全ガイド

    好きでも嫌いでも、テレビやノートパソコンの画面に釘付けになってNetflixを観る時間は、私たちが必要としている(そして受けるに値する)最高のセラピーのようなものです。映画からTVドラマまで幅広いコンテンツをストリーミング配信するNetflixは、間違いなく最もエンターテインメント性の高いプラットフォームの一つです。ミレニアル世代が何よりもNetflixを選ぶ理由も、納得できますよね。 しかし正直なところ、他の国や地域のNetflixコンテンツにアクセスできたら、どれほど嬉しいでしょうか?想像するだけでワクワクしませんか?まだまだ観たい作品はたくさんあるのですから、選択肢は多いほうが断然楽し