Please Enable JavaScript!
Gon[ Enable JavaScript ]

반응형

안드로이드(Android) 다이얼로그(Dialog) 키보드 Back key 눌렀을 때 종료하는 방법

 

환경 : Eclipse Mars, Android 4.2.2

 

AlertDialog 를 사용할 때 팝업창을 띄우고 종료할려면 팝업창 내부에 확인이나 취소 버튼 이벤트 소수를 구현해야 합니다. 하지만 사용자들은 팝업창이 뜬 상태에서 기기에 있는 back 키를 눌렀을 때 팝업창이 사라질거라고 생각합니다. AlertDialog 구현시 Back Key 를 눌렀을 때 팝업창을 종료시키는 방법에 대해 알아 보겠습니다.

 

 

▼ 팝업창에서 기기의 키를 인식하기 위해서는 setOnKeyListener() 을 셋팅해야 합니다. 인수로 DialogInterface.OnKeyListener 객체를 생성해서 넘기시면 됩니다. 기본함수인 onKey() 에서 keyCode KeyEvent.KEYCODE_BACK 인 값이 기기에서 Back 키를 누를 때 값입니다. KeyEvent.KEYCODE_BACK 일때 어플을 종료하는 finish() 와 다이얼로그를 종료하는 dismiss() 함수를 차례대로 호출합니다.finish() 만 하면 될 것 같지만 dialog.dismiss() 를 하지 않으면 메모리 릭이 일어나므로 차례대로 해주시길 바랍니다.


// key 셋팅
alertDialogBuilder
		.setOnKeyListener(new DialogInterface.OnKeyListener() {
			public boolean onKey(DialogInterface dialog,
					int keyCode, KeyEvent event) {
				if (keyCode == KeyEvent.KEYCODE_BACK) {
					finish();
					dialog.dismiss();
					return true;
				}
				return false;
			}
		});

 

▼ 아래는 기기에서 Back Key 를 눌렀을 때 AlertDialog 를 닫는 전체 Activity 소스입니다. AlertDialog.Builder Builder 를 생성하고 setOnKeyListener() 셋팅하였습니다.

 

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class AlertDialogActivity extends Activity implements
		OnClickListener {

	final Context context = this;
	private Button button;

	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_alert_dialog);

		button = (Button) findViewById(R.id.btn_alert);

		// 클릭 이벤트
		button.setOnClickListener(this);
	}

	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btn_alert:
			AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
					context);

			// 제목셋팅
			alertDialogBuilder.setTitle("프로그램 안내");

			// key 셋팅
			alertDialogBuilder
					.setOnKeyListener(new DialogInterface.OnKeyListener() {
						public boolean onKey(DialogInterface dialog,
								int keyCode, KeyEvent event) {
							if (keyCode == KeyEvent.KEYCODE_BACK) {
								//dialog.dismiss();
								return true;
							}
							return false;
						}
					});

			// AlertDialog 셋팅
			alertDialogBuilder
					.setMessage("공지사항 내용표현")
					.setCancelable(false)
					.setPositiveButton("종료",
							new DialogInterface.OnClickListener() {
								public void onClick(
										DialogInterface dialog, int id) {
									// 프로그램을 종료한다
									AlertDialogActivity.this.finish();
								}
							})
					.setNegativeButton("취소",
							new DialogInterface.OnClickListener() {
								public void onClick(
										DialogInterface dialog, int id) {
									// 다이얼로그를 취소한다
									dialog.cancel();
								}
							});

			// 다이얼로그 생성
			AlertDialog alertDialog = alertDialogBuilder.create();

			// 다이얼로그 보여주기
			alertDialog.show();
			break;

		default:
			break;
		}
	}
}

 

 

반응형
Posted by 녹두장군1
,