본문 바로가기

Android/Dialog

안드로이드/Android Dialog의 각종 속성들 정리 ~!


 < 개발 환경 >  
   작성일 : 2013.02.03
   OS 설치 버전 : Windows7 32bit  
   SDK 설치 버전 : 안드로이드 SDK 4.2 (젤리빈) / API LEVEL : 17  
   ADT 설치 버전 : 21   
   Java 설치 버전 : JDK 1.6.0_20 / JRE6 
   이클립스 설치 버전 : Indigo
   테스트단말 : 삼성 갤럭시 S2 4.0.4 (아이스크램 샌드위치)   

 < 프로젝트 적용 > 
   Android Build Target / API LEVEL / Complie With : 17  
   minSdkVersion : 8 
   targetSdkVersion : 16  
   Java Compiler Level : 1.6  
   Text file encoding : UTF-8






안드로이드/Android Dialog의 각종 속성들 정리 ~!





Dialog의 각종 속성들 정리 입니다.


1) Back키 눌렀을 경우 Dialog Cancle 여부 설정

 
  mDialog.setCancelable(false); // true : cancle , false : no cancle


2) Dialog 호출시 배경화면이 검정색으로 바뀌는 것 막기 !

 
  mDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);


3) Dialog 밖을 터치 했을 경우 Dialog 사라지게 하기

 
  mDialog.setCanceledOnTouchOutside(true);


4) Dialog 밖의 View를 터치할 수 있게 하기 (다른 View를 터치시 Dialog Dismiss)

 
  mDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,

             WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
 


5) Dialog 자체 배경을 투명하게 하기

 
  mDialog.getWindow().setBackgroundDrawable

             (new ColorDrawable(android.graphics.Color.TRANSPARENT));
 



6) Dialog Cancle시 Event 받기 

 
  mDialog.setOnCancelListener(OnCancelListener listener) 




7) Dialog Show시 Event 받기 

 
  mDialog.setOnShowListener(OnShowListener listener) 




8) Dialog Dismiss시 Event 받기 

 
  mDialog.setOnDismissListener(OnDismissListener listener) 







예제코드 :

package arabiannight.tistory.com.dialogattribute;

import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.DialogInterface.OnDismissListener;
import android.content.DialogInterface.OnShowListener;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.Toast;

public class MainActivity extends Activity {

	private Dialog mDialog = null;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		createDialog();
		
	}
	
	public void onClick(View v) {
		switch (v.getId()) {
		
		case R.id.btn_click:
			
			Toast.makeText(MainActivity.this, "Activity Button 입니다.", 
					Toast.LENGTH_SHORT).show();
		
		case R.id.btn_ok:
			
			dismissDialog();
			
			break;
			
		case R.id.btn_cancle:
			
			dismissDialog();
			
			break;

		default:
			break;
		}
	}
	
	private void createDialog() {
		final View innerView = getLayoutInflater().inflate(R.layout.dialog, null);
		
		mDialog = new Dialog(this);
		mDialog.setTitle("Title");
		mDialog.setContentView(innerView);
		
		// Back키 눌렀을 경우 Dialog Cancle 여부 설정
		mDialog.setCancelable(true);
		
		// Dialog 생성시 배경화면 어둡게 하지 않기
		mDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
		
		// Dialog 밖을 터치 했을 경우 Dialog 사라지게 하기
//		mDialog.setCanceledOnTouchOutside(true);
		
		// Dialog 밖의 View를 터치할 수 있게 하기 (다른 View를 터치시 Dialog Dismiss)
		mDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, 
				WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
		
		// Dialog 자체 배경을 투명하게 하기
//		mDialog.getWindow().setBackgroundDrawable
//				(new ColorDrawable(android.graphics.Color.TRANSPARENT));
		
		// Dialog Cancle시 Event 받기
		mDialog.setOnCancelListener(new OnCancelListener() {
			
			@Override
			public void onCancel(DialogInterface dialog) {
				Toast.makeText(MainActivity.this, "cancle listener", 
						Toast.LENGTH_SHORT).show();
			}
		});
		
		// Dialog Show시 Event 받기
		mDialog.setOnShowListener(new OnShowListener() {
			
			@Override
			public void onShow(DialogInterface dialog) {
				Toast.makeText(MainActivity.this, "show listener", 
						Toast.LENGTH_SHORT).show();
			}
		});
		
		// Dialog Dismiss시 Event 받기
		mDialog.setOnDismissListener(new OnDismissListener() {
			
			@Override
			public void onDismiss(DialogInterface dialog) {
				Toast.makeText(MainActivity.this, "dismiss listener", 
						Toast.LENGTH_SHORT).show();
			}
		});
		
		mDialog.show();
		
	}
	
	private void dismissDialog() {
		if(mDialog != null && mDialog.isShowing()) {
			mDialog.dismiss();
		}
	}

}





파일첨부 : 

TestDialogAttribute.zip



스크린샷 : 




감사합니다.