주요 내용으로 건너뛰기

[안드로이드] 다이얼로그 프래그먼트(Dialog Fragment) 사용하기(1) - 커스텀 다이얼로그 만들기

[안드로이드] 다이얼로그 프래그먼트(Dialog Fragment) 사용하기(2) - 액티비티와 통신하기

안드로이드 앱을 만들다보면 이래저래 다이얼로그를 만들어 쓸 일이 많다. 특히 AlertDialog는 앱을 만들면서 안쓴적이 단 한번도 없는 것 같음. 하기사 세상 천지에 ~하시겠습니까? 확인/취소 형식의 대화창 안띄우는 프로그램이 어디있겠냔 말이지. 여튼 안드로이드에는 AlertDialog를 포함해 다양한 형태의 다이얼로그를 지원하고 있다. 하지만 앱을 만들다 보면 안드로이드에서는 지원하지 않는 형태의 다이얼로그가 필요할 때가 있는데, 바로 그런 커스텀 다이얼로그를 만들기 위한 클래스가 있으니 바로 DialogFragment(다이얼로그 프래그먼트)다.

참고로 다이얼로그 프래그먼트는 안드로이드 API 레벨 11부터 지원하고 있다. 하지만 세상에는 아직 프로요(API 레벨 8) 폰을 쓰는 자들이 있다고 하니 본 포스팅은 android support library v4에서 지원하는녀석을 기준으로 작성하도록 한다.
// import DialogFragment in Support library v4
import android.support.v4.app.DialogFragment

public class TestDialogFragment extends DialogFragment {
    
    // 각종 뷰 변수 선언
    
    public TestDialogFragment() {}
    
    @Override
    public View OnCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.your_fragment_layout, container);
        
        // 레이아웃 XML과 뷰 변수 연결
        
        return view;
    }
}

일단 다이얼로그 프래그먼트를 상속하는 클래스를 하나 만들자. 레이아웃 파일이야 본인이 알아서 만들면 되는 것이고... 일단은 저게 기본 형태이다. 저렇게 비어있는 형태의 생성자가 필요한데, 필요한 아규먼트가 있다면 넣어줘도 좋다.

// import FragmentManager in Support library v4
import android.support.v4.app.FragmentManager;

public class CallDialogActivity extends Activity {
    
    private Button buttonCallDialog;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_activity);
        
        buttonCallDialog = (Button) findViewById(R.id.button_dialog);
        buttonCallDialog.setOnClickListener(new View.OnClickListener() {
           
           @Override
           public void onClick(View v) {
                FragmentManager fm = getSupportFragmentManager();
                TestDialogFragment dialogFragment = new TestDialogFragment();
                dialogFragment.show(fm, "fragment_dialog_test");
           }
            
        });
    }
    
}

저기서 알아야 할 것은 onClick 메서드 안에 있는 세 줄이다.  support library v4에 있는 FragmentManager를 임포트해 getSupportFragmentManager 메서드로 프래그먼트 매니저 객체를 만든다. 그리고 난 후에 위에서 만든 TestDialogFragment의 새 객체를 생성하고, show 메서드로 생성되게 만들면 되는 것이다. 여기서 필요한 아규먼트는 바로 윗윗 줄의 프래그먼트 매니저 인스턴스, 프래그먼트 태그이다. 태그는 뭐 본인이 알아서 적당히 넣으면 된다.

물론 저대로 한다고 해서 완벽한 커스텀 다이얼로그가 만들어지는 것은 아니다. 저렇게 해서 불러낸다고 해봤자 다이얼로그의 타이틀 부분이 남아있고, 타이틀 하단의 배경 역시 남아있다.  물론 타이틀 하단의 배경은 보통은 바로 위에 커스텀 레이아웃이 겹쳐있어 보이지 않기 마련이지만 여러분이 만든 레이아웃이 정사각형 모양이 아닐수도 있지 않나. 그러니 기본으로 날려놓는 것을 알아두는 것이 좋다. 걱정 마라 딱 두줄이면 된다!

@Override
public View OnCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    ...
    
    // remove dialog title
    getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    
    // remove dialog background
    getDialog().getWindow().setBackgroundDrawable(
        new ColorDrawable(android.graphics.Color.TRANSPARENT));
    
    ...
}

다음과 같이 아까 만든 다이얼로그 프래그먼트의 onCreateView 메서드 안에 딱 저 두 줄만 넣어주면 된다. 일단 다이얼로그 프래그먼트를 띄우는 데에는 이정도 작업이면 충분하다. 이제 이걸로 데이터를 주거니 받거니 하는 것에 대해서는 다음 포스팅에서 알려드리도록 하겠음 ㅇㅇ

개 발자

송이불 님의 창작활동을 응원하고 싶으세요?

댓글

SNS 계정으로 간편하게 로그인하고 댓글을 남겨주세요.
#15
[안드로이드] 앱 안에 인증문자 받아오기(2) - 인증번호 저장하기
#17
[안드로이드] 다이얼로그 프래그먼트(Dialog Fragment) 사용하기(2) - 액티비티와 통신하기