Android(Java) - AlertDialog - 대화상자 사용법, 뒤로가기 버튼으로 대화상자 출력하기

반응형

 

대화 상자 (Alert Dialog)

  • 사용자에게 결정을 내리거나 추가 정보를 입력하라는 메시지를 표시하는 작은 창
  • 보통은 사용자가 다음으로 계속 진행하기 전에 조치를 취해야 하는 이벤트에 사용
  • AlertDialog
    • 제목 한 개, 버튼 최대 세 개, 선택 가능한 항목 목록 또는 맞춤 레이아웃 한 개를 표시할 수 있는 대화상자
  • DatePickerDialog, TimePickerDialog
    • 미리 정의된 UI가 있는 대화상자이며, 사용자가 날짜 또는 시간을 선택

구문

AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);
alert.setTitle("타이틀 메시지");
alert.setMessage("메시지");

// 대화상자 '확인 버튼' 이벤트
alert.setPositiveButton("확인 버튼의 출력 문구", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {
        // 확인 버튼 클릭시 실행 할 코드 작성
    }
});

// 대화상자 '취소 버튼' 이벤트
alert.setNegativeButton("취소 버튼의 출력 문구", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {
        // 취소 버튼 클릭시 실행 할 코드 작성
    }
});
// 대화상자 버튼을 누르지 않으면 화면이 넘어가지 않게 설정
alert.setCancelable(false);
// 대화상자 화면에 표시
alert.show();

기능 설계

  • 버튼을 누르면 대화 상자 출력
    • 예를 누를 경우 화면에 OK 출력
    • 아니오를 누를 경우 액티비티 종료

레이아웃 UI 설계

  • ALERT 버튼을 누르면 대화 상자 출력


소스 코드

  • MainActivity.java
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

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

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);
                alert.setTitle("앱 종료");
                alert.setMessage("이 앱을 종료하시겠습니까?");

                // 대화상자 'Yes' 이벤트, 액티비티 종료
                alert.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        finish(); // 액티비티 종료
                    }
                });

                // 대화상자 'No' 이벤트, Ok 문구 출력
                alert.setNegativeButton("No", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Toast.makeText(getApplicationContext(), "Ok", Toast.LENGTH_LONG).show();
                    }
                });
                // 대화상자 버튼을 누르지 않으면 화면이 넘어가지 않게 설정
                alert.setCancelable(false);
                // 대화상자 화면에 표시
                alert.show();
            }
        });
    }
}

실행 화면

  • ALERT 버튼을 누르면 뜨는 다이얼로그

 

  • No를 누를 경우 Ok 문구 출력

 

  • Yes를 누를 경우 액티비티 종료


뒤로 가기 버튼 활용 (앱 종료)

  • 뒤로 가기 버튼을 누르면 기존의 뒤로 가기 기능을 비활성화하고 대화상자로 기능 재정의
  • 앱 종료 대화상자에서 예를 누르면 종료, 아니면 Ok문구 출력
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public void onBackPressed() {
        // super.onBackPressed(); 비활성화하여 백버튼의 기능 비활성화하고 새로운 기능 재정의
        AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);
        alert.setTitle("앱 종료");
        alert.setMessage("이 앱을 종료하시겠습니까?");

        // 대화상자 'Yes' 이벤트, 액티비티 종료
        alert.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                finish(); // 액티비티 종료
            }
        });

        // 대화상자 'No' 이벤트, Ok 문구 출력
        alert.setNegativeButton("No", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(getApplicationContext(), "Ok", Toast.LENGTH_LONG).show();
            }
        });
        // 대화상자 버튼을 누르지 않으면 화면이 넘어가지 않게 설정
        alert.setCancelable(false);
        // 대화상자 화면에 표시
        alert.show();
    }
}

 

반응형