[안드로이드] 커스텀 다이얼로그 [1] - 생성


안드로이드 커스텀 다이얼로그 만드는 법.


안드로이드에서 제공하는 AlertDialog 에선 단순하게 Title, Message 등 텍스트만 표시가 가능했었습니다.

Custom Dialog 에서는 말 그대로 내가 원하는 다이얼로그 모양을 만들고 기능을 추가할 수 있습니다.

Activity 에서 Dialog 로 값을 넘길 수도 있고

Dialog 에서 Activity 로 결과 값을 넘겨줄 수도 있습니다.

이번 포스팅에선 간단히 만드는법만 소개하고 다음 포스팅에서 더 자세히 다루겠습니다.


먼저 결과입니다.

1. Result


2. Step by Step

2-1. 라이브러리 추가

  • 다이얼로그에 TextInputEditText 과 TextInputEditText 를 사용해서 넣어준 라이브러리입니다. 사용 안하신다면 넘어가셔도 좋습니다.

build.gradle (app)

compile 'com.android.support:design:25.3.1'


2-2. 다이얼로그 레이아웃 생성

다이얼로그의 모양을 만들어줍니다. 예제에서는 간단히 EditText 를 사용하였지만 다른 위젯들도 사용 가능합니다.

모양은 만들기 나름이라 따로 xml 파일을 첨부하진 않겠습니다. Github 에 전체 소스 공개하니 필요하신 분은 맨 아래 Github 에서 받아가세요~


2-3 다이얼로그 클래스 생성

android.app.Dialog 를 상속 받는 class 를 만들어줍니다. 만드는 법이 간단합니다. onCreate(Bundle savedInstanceState) 에서 레이아웃만 설정해주면 생성 자체는 끝입니다.

CustomDialog.java

public class CustomDialog extends Dialog implements View.OnClickListener{
    private static final int LAYOUT = R.layout.dialog_custom;

    private Context context;

    private TextInputEditText nameEt;
    private TextInputEditText emailEt;

    private TextView cancelTv;
    private TextView searchTv;

    private String name;

    public CustomDialog(@NonNull Context context) {
        super(context);
        this.context = context;
    }

    public CustomDialog(Context context,String name){
        super(context);
        this.context = context;
        this.name = name;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(LAYOUT);

        nameEt = (TextInputEditText) findViewById(R.id.findPwDialogNameEt);
        emailEt = (TextInputEditText) findViewById(R.id.findPwDialogEmailEt);

        cancelTv = (TextView) findViewById(R.id.findPwDialogCancelTv);
        searchTv = (TextView) findViewById(R.id.findPwDialogFindTv);

        cancelTv.setOnClickListener(this);
        searchTv.setOnClickListener(this);

        if(name != null){
            nameEt.setText(name);
        }
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.findPwDialogCancelTv:
                cancel();
                break;
            case R.id.findPwDialogFindTv:
                break;
        }
    }
}

위에서 생성자가 두 개 있는데, Activity 에서 값을 Dialog 로 넘길 경우에 두 번째 생성자를 통해 받기 위해 만들었습니다.

Dialog 생성시 값을 받을 필요가 없으시다면 작성하지 않으셔도 좋습니다.

setContentView(LAYOUT) 만 해주시면 생성 자체는 끝입니다.

그 아래 코드들은 View 할당과 ClickListener 를 설정해준 코드입니다.


2-4. Activity 에서 Dialog 호출

MainActivity 에서 버튼 클릭 시 CustomDialog 를 호출해보도록 하겠습니다. 필요한 부분만 코드를 첨부하겠습니다.

  showDialogBtn.setOnClickListener(this); // Set click Listener
}

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.showDialogBtn:
            CustomDialog dialog = new CustomDialog(this);
            dialog.show();
            break;
    }
}

버튼이 클릭 될 때 CustomDialog 객체를 생성해주고 context를 매개변수로 전달해줍니다.

생성된 CustomDialog 객체에서 show() 메소드를 호출해주기만 하면 커스텀 다이얼로그 호출이 완료됩니다.


3. Source Code

전체 소스 코드는 Github 에 연동해놨습니다.

다음 포스팅은 커스텀 다이얼로그에서 어떻게 결과값을

호출한 Activity로 반환하는지에 대해 설명하도록 하겠습니다.



[Custom dialog 시리즈]

  1. [안드로이드] 커스텀 다이얼로그 [1] - 생성 - 현재 글
  2. [안드로이드] 커스텀 다이얼로그 [2] - ClickListener, Callback