만족
[Android Studio] Dialog 본문
[Android Studio] Dialog
FrontEnd/Android Satisfaction 2017. 7. 27. 04:11https://developer.android.com/guide/topics/ui/dialogs.html?hl=ko#FullscreenDialog
Dialog는 액티비티를 띄우는 것 처럼 화면 전체를 차지하여 내용을 표시하는 것이 아닌
작은 대화상자 모양을 이용하여 사용자에게 내용을 표시할 수 있게 해줍니다.
AlertDialog클래스를 직접 이용하여 만들 수도 있지만
API에서는 AlertDialog.Builder 클래스를 이용하여 만드는 것을 권장합니다.
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage("표시할 메시지")
.setPositiveButton("긍정 버튼에 표시될 텍스트", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {//긍정 버튼을 클릭했을 때, 실행할 동작
}
})
.setNegativeButton("부정 버튼에 표시될 텍스트", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {//부정 버튼을 클릭했을 때, 실행할 동작
}
});
먼저 위와 같은 형태의 코드를 작성합니다.
setMesaage, setPositiveButton, setNegativeButton메소드는 모두 AlertDialog.Builder 타입 클래스를 반환하기 때문에
위처럼 체인 형식으로 사용이 가능합니다.
그 다음
builder.create().show();
처럼 작성해주면 다이얼로그가 표시되게 됩니다.
단순히 메시지와 긍정/부정 버튼을 표시하는 것 뿐만 아니라, 다이얼로그에 View나 List를 추가할 수도 있습니다.
해당 방법은 위의 Android API를 참조하세요!
긍정/부정 버튼을 눌렀을 때의 동작
긍정 버튼을 누르게 되면 자동적으로 다이얼로그의 dismiss()메소드가 발동되게 됩니다.
dismiss()는 onCancel()메소드를 호출하게 되고, 결과적으로 다이얼로그가 종료되게 됩니다.
부정 버튼을 누르게 되면, onCancel()메소드를 호출하게 되고, 이 역시 다이얼로그가 종료되게 됩니다.
그런데, 버튼을 누르더라도 다이얼로그를 종료하고 싶지 않다면 어떻게 해야 할까요?
builder.create().show()를 지우고 난 뒤 아래 코드를 추가해 줍니다.
final AlertDialog dialog=builder.create();
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface d) {
dialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//Prevent to close dialog when positive button is clicked.
//긍정 버튼을 클릭했을 때, 실행할 동작
}
});
dialog.getButton(DialogInterface.BUTTON_NEGATIVE).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Prevent to close dialog when negative button is clicked.
//부정 버튼을 클릭했을 때, 실행할 동작
}
});
}
});
이렇게 하면, dialog의 긍정/부정 버튼에 추가되어 있는 Listener를 바꿀 수 있게 됩니다.
(즉 dismiss()와 onCancel()메소드가 발동되지 않게 됩니다!)
하지만 이제 자동적으로 dismiss()와 onCancel()이 호출되지 않으므로 직접 추가하여 다이얼로그를 종료해야 합니다.
'FrontEnd > Android' 카테고리의 다른 글
[Android Studio] 파이어베이스 데이터 로드 대기 (Wait to load data from firebase in android) (4) | 2018.01.23 |
---|---|
[Android Studio] Custom View (0) | 2018.01.17 |
[Android Studio] 코드로 키 패드 열기 (0) | 2017.07.20 |
[Android Studio] ViewFlipper (0) | 2017.06.30 |
[Android Studio] Visibility 속성값의 invisible, gone 차이점 (0) | 2017.06.30 |