Android

[Android] AlertDialog를 응용해보기

Hoplin 2022. 4. 7. 02:21
반응형

AlertDialog 응용예제가 갑자기 생각났다. 간혹 몇몇 애플리케이션에서 root 액티비티에서 뒤로가기 키를 누르면, "앱을 종료하시겠습니까?" 라는 Dialog창을 띄우는것을 볼 수 있다. 한번 그 코드를 구현해 보려고 한다. 우선 코드는 아래와 같이 작성하였다.(딱히 설정할 레이아웃은 없다)

package com.example.sampletoast;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.DialogInterface;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.google.android.material.snackbar.Snackbar;

import java.security.Key;

public class MainActivity extends AppCompatActivity {

    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onBackPressed() {
        exitapp();
    }
    private void exitapp(){
        AlertDialog.Builder builder = new AlertDialog.Builder(this);

        builder.setTitle("Exit Program");
        builder.setMessage("Exit Application?");
        builder.setIcon(android.R.drawable.ic_dialog_alert);
        builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                int pid = android.os.Process.myPid();
                android.os.Process.killProcess(pid);
            }
        });
        builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {

            }
        });
        AlertDialog dialog = builder.create();
        dialog.show();
    }
    public void snackbarclick(View v){
        Snackbar.make(v, "Snackbar",Snackbar.LENGTH_SHORT).show();
    }
}

뒤로가기 키 이벤트 처리

@Override
public void onBackPressed() {
    exitapp();
}

우선적으로 "뒤로가기 버튼을 누른다" 라는 이벤트를 처리해야한다. 이 이벤트를 처리하기 위해서는 "onBackPressed()" 메소드를 오버라이딩 해주어야 한다. exitapp()은 앱을 종료할것인지 물어보는 창을 생성하는 메소드이다(아래에서 만듬).

 

AlertDialog 객체 생성하기

package com.example.sampletoast;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.DialogInterface;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.material.snackbar.Snackbar;

import java.security.Key;

public class MainActivity extends AppCompatActivity {

    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }


    @Override
    public void onBackPressed() {
        exitapp();
    }
    private void exitapp(){
        AlertDialog.Builder builder = new AlertDialog.Builder(this);

        builder.setTitle("Exit Program");
        builder.setMessage("Exit Application?");
        builder.setIcon(android.R.drawable.ic_dialog_alert);
        builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                int pid = android.os.Process.myPid();
                Toast.makeText(getApplicationContext(),"Exit application",Toast.LENGTH_SHORT).show();
                android.os.Process.killProcess(pid);
            }
        });
        builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(getApplicationContext(),"Cancel to exit application",Toast.LENGTH_SHORT).show();
            }
        });
        AlertDialog dialog = builder.create();
        dialog.show();
    }
    public void snackbarclick(View v){
        Snackbar.make(v, "Snackbar",Snackbar.LENGTH_SHORT).show();
    }
}

기본적인 AlertDialog생성 방식은 아래 포스트에서 했던 방식과 동일하다.

https://jhoplin7259.tistory.com/237

 

[Android] 알림 대화상자

안드로이드 환경을 사용하다 보면 아래와 같이 알림상자를 간혹 볼 수 있다. 이러한 것을 알림 대화상자, AlertDialog라고 부르며, 이는 사용자에게 확인을 받거나 선택하게 할때 사용한다. Edit Text

jhoplin7259.tistory.com

여기서 주목할 것은, 애플리케이션을 종료하는 부분이다.

builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                int pid = android.os.Process.myPid();
                Toast.makeText(getApplicationContext(),"Exit application",Toast.LENGTH_SHORT).show();
                android.os.Process.killProcess(pid);
            }
        });

"예" 버튼을 누르면 애플리케이션이 종료된다는 로직이다. 우선 애플리케이션을 종료하기 위해서는 애플리케이션 자신의 PID(Process ID)를 가져온다(android.os.Process.myPid()). 그 후 해당 pid를 끝내면, 애플리케이션도 자동으로 꺼지게 된다(android.os.Process.killProcess(pid))

 

결과를 살펴보자

반응형