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 여부 설정

 
  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) 







예제코드 :

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();
        }
    }
 
}



+ Recent posts