반응형
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
여기서 주목할 것은, 애플리케이션을 종료하는 부분이다.
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))
결과를 살펴보자
반응형
'Android' 카테고리의 다른 글
[Android] Progressbar 사용하기 (0) | 2022.04.07 |
---|---|
[Android] Snackbar사용하기 (0) | 2022.04.07 |
[Android] 알림 대화상자 (0) | 2022.04.07 |
[Android] onSaveInstanceState()로 액티비티 변수 보존하기 (0) | 2022.04.06 |
[Android] Touch,Gesture 이벤트 처리 (0) | 2022.03.28 |