본문 바로가기

Android

Android Alert Dialog 사용법

위와 같은 Alert Dialog를 띄우는 방법은 다음과 같다.

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("플레이어 추가");
builder.setMessage("Confirmed?");

builder.setPositiveButton("확인", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {

    }
});

builder.setNegativeButton("취소", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {

    }
});
builder.show();

각각의 onClick 함수에는 처리할 코드를 알아서 넣어주면 된다.

Builder Constructor안의 context 인자에는 현재 사용 중인 액티비티의 context를 넣어주면 된다.

 

만약 위와 같이 editText를 추가하고 싶다면, 코드를 다음과 같이 써주면 된다.

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
final EditText editText = new EditText(MainActivity.this);
builder.setTitle("플레이어 추가");
builder.setView(editText);

builder.setPositiveButton("확인", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {

    }
});

builder.setNegativeButton("취소", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {

    }
});
builder.show();

다만, 이렇게 되면 사진과 같이 margin이 적용되지 않게 되는데, 이렇게 되면 임의로 레이아웃을 만들어 지정해 줄 수도 있다.

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
final EditText editText = new EditText(MainActivity.this);
final ConstraintLayout container = new ConstraintLayout(MainActivity.this);
final ConstraintLayout.LayoutParams params = new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.leftMargin = getResources().getDimensionPixelSize(R.dimen.alert_dialog_internal_margin);
params.rightMargin =getResources().getDimensionPixelSize(R.dimen.alert_dialog_internal_margin);
editText.setLayoutParams(params);
container.addView(editText);


builder.setTitle("플레이어 추가");
builder.setView(container);

builder.setPositiveButton("확인", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {

    }
});

builder.setNegativeButton("취소", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {

    }
});
builder.show();

dimen 요소는 res > values > dimens.xml에 다음과 같이 직접 추가해주면 된다.

<dimen name="alert_dialog_internal_margin">20dp</dimen>

editText를 ConstraintLayout 객체에 넣어 레이아웃 설정을 한 뒤 builder에 뷰를 추가하는 모습이다.

잘 적용되었다!

 

하지만 저런 elements를 여러 개 추가해야 하는 상황이라면 저 방법을 사용하기엔 무리가 있다.

View를 임의로 추가하여 (레이아웃 파일은 따로 만들어야함) 레이아웃 설정 후 넣는 방법이다.

 

귀찮지 않다면, 그냥 AlertDialog 자체를 만드는 것도 나쁘지 않은 방법.