android 다이알로그 각종 속성 정리
원본 : http://arabiannight.tistory.com/360
만약 dialog를 상속 받아서 사용할 경우 호출시는..
new NotiDialog(mActivity).show();
dialog를 상속 받은 클래스는..
public class NotiDialog extends Dialog { private Context mContext = null; protected static final String TAG = "NotiDialog"; private TextView mTvContents = null; private Button mBtn_close = null; public NotiDialog(Context context) { super(context); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.dialog_noti); // getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); // 투명하게.. this.setCanceledOnTouchOutside(false); // 다이알로그 바깥영역 터치시, 다이알로그 닫히지 않기 this.setCancelable(true); // 백키로 다이알로그 닫기 mContext = context; mBtn_close = (Button)findViewById(R.id.btn_noti_close); mBtn_close.setOnClickListener(onClickListener); mTvContents = (TextView) findViewById(R.id.tvContents); mTvContents.setText("test contents"); } @Override public void show() { super.show(); } @Override public void dismiss() { super.dismiss(); } @Override public void onBackPressed() { super.onBackPressed(); } private View.OnClickListener onClickListener = new View.OnClickListener() { @Override public void onClick(View v) { int id = v.getId(); switch (id) { case R.id.btn_noti_close: { dismiss(); break; } default: break; } } }; }
style을 사용하여 배경이 반투명이 아니라 투명하게 사용하는 방법
styles.xml 에서
public NotiDialog(Context context) { super(context, R.style.myDialog); ... }
다이알로그 위치가 한 가운데가 아니라, 상하좌우로 이동하는 방법
public NotiDialog(Context context) { ... this.getWindow().setGravity(Gravity.TOP|Gravity.LEFT); // 상단 좌측으로 다이알로그 이동 LayoutParams lp = this.getWindow().getAttributes(); lp.x= 20; // 왼쪽에서 20px만큼 이동, 이런방법도 가능( lp.x = Gravity.LEFT + 20; ) lp.y = 40; // 상단에서 40px 만큼 이동 this.getWindow().setAttributes(lp); ... }
참고) 일반 다이알로그에서 상하좌우로 이동하는 방법
... Dialog itemSizeDialog = new Dialog(mContext); itemSizeDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); itemSizeDialog.setCanceledOnTouchOutside(false); itemSizeDialog.setContentView(R.layout.dialog_item_size); itemSizeDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); itemSizeDialog.getWindow().setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL); // 상단에 붙임. LayoutParams params = itemSizeDialog.getWindow().getAttributes(); params.y = 40; // 상단에서 아래로 40 pixel 만큼 이동 itemSizeDialog.getWindow().setAttributes(params); ...
--------------- 아래는 원본에 있는 내용들입니다. ---------------
Dialog의 각종 속성들 정리 입니다.
1) Back키 눌렀을 경우 Dialog Cancle 여부 설정
|
2) Dialog 호출시 배경화면이 검정색으로 바뀌는 것 막기 !
|
3) Dialog 밖을 터치 했을 경우 Dialog 사라지게 하기
mDialog.setCanceledOnTouchOutside(true); |
4) Dialog 밖의 View를 터치할 수 있게 하기 (다른 View를 터치시 Dialog Dismiss)
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); |
5) Dialog 자체 배경을 투명하게 하기
(new ColorDrawable(android.graphics.Color.TRANSPARENT)); |
6) Dialog Cancle시 Event 받기
|
7) Dialog Show시 Event 받기
|
8) Dialog Dismiss시 Event 받기
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | 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(); } } } |
'안드로이드 개발 팁' 카테고리의 다른 글
android 버튼 배경 투명으로 하는 방법 (0) | 2014.02.12 |
---|---|
안드로이드 태블릿 구분 방법 (0) | 2014.02.05 |
안드로이드 문자열 저절로 흐르게 (0) | 2014.01.23 |
android 색상표 (0) | 2013.12.16 |
android 빠른 에뮬 Genymotion 설치 방법 (3) | 2013.12.06 |