티스토리 뷰



이 자료들은 팁스소프트에서 제공하는 [ 알짜배기 ] 프로그램을 이용하면 더 편리하게 볼수 있습니다.
* 알짜배기 프로그램 받기 - http://www.tipssoft.com/bulletin/tb.php/QnA/8406
* 관리자의 Tipssoft 이야기를 들어보세요 ( 트위터 ID : tipssoft )
* 안드로이드 강좌 목록 - http://www.tipssoft.com/bulletin/tb.php/old_bbs/501
종종 안드로이드용 기기를 사용하다보면 어플리케이션을 설치하기위해서 대기 시간이 발생하거나
어플리케이션에서 데이터를 송수신하기 위해서 대기 시간이 필요할 수 있습니다. 이런 경우 사용자에게
실행중인 작업이 있으니 잠시 기다려달라는 의미로 프로그래스 대화상자를 사용합니다.
기본적으로 대화상자는 대화상자가 출력되었을 때 오직 대화상자에만 사용자 조작이 가능하도록
백그라운드의 사용자 조작을 무시하고 있습니다. 또한 대화상자가 실행되어도 대화상자를 실행시킨
액티비티는 실행 흐름이 중단되지 않고 진행된다는 특징이 있습니다.
그래서 액티비티가 어느정도 시간을 필요로하는 작업을 할 때 프로그래스 대화상자를 수행시키면
액티비티는 자신의 작업을 계속하여 진행하면서 사용자에게 기다리라는 의사를 전달하고, 사용자가
백그라운드를 통해서 액티비티에 사용자 조작을 가하는 것을 차단할 수 있습니다.
프로그래스 대화상자에는 작업의 종료를 가늠할 수 있도록 가로 막대 모양으로 진행상황을 출력하면서
수치값을 표시하는 형태가 있고, 작업의 종료를 가늠할 수 없도록 시계 방향으로 계속 회전하는 형태도
있습니다. 이 두 종류의 대화상자는 AlertDialog 클래스를 상속받은 ProgressDialog 클래스로 구현할
수 있으며 막대형 프로그래스 대화상자보다 원형 프로그래스 대화상자가 좀 더 구현하기 쉽고,
간단합니다.
이번 강좌에서는 원형 프로그래스 대화상자를 사용하는 방법에 대하여 알아보도록 하겠습니다.
1. 대화상자 실행하기
프로그래스 대화상자는 AlertDialog 클래스를 이용하여 대화상자를 생성할 때처럼 onCreateDialog
메소드를 사용하지 않고 대화상자를 생성하면서 출력하는 방법과 onCreateDialog 메소드를 사용하여
이미 생성된 대화상자를 재사용하는 방법으로 실행시킬 수 있습니다.
1.1 대화상자를 생성과 동시에 실행하기
원형 대화상자는 ProgressDialog 클래스의 show 메소드를 이용하여 대화상자를 생성하면서 바로
실행하도록 할 수 있습니다. show 메소드는 스태틱 메소드로 해당 메소드에 명시한 인자들을 이용
해서 원형 프로그래스를 생성하고 출력하는 역할을 합니다. show 메소드의 오버로딩된 원형은
아래와 같습니다.
public static ProgressDialog show (Context context, CharSequence title,
CharSequence message)
public static ProgressDialog show (Context context, CharSequence title,
CharSequence message, boolean indeterminate,
boolean cancelable)
public static ProgressDialog show (Context context, CharSequence title,
CharSequence message, boolean indeterminate,
boolean cancelable,
DialogInterface.OnCancelListener cancelListener)
public static ProgressDialog show (Context context, CharSequence title,
CharSequence message, boolean indeterminate)
위 메소드에서 사용하는 매개 변수중에서 context 는 대화상자를 사용하는 액티비티 등의
컨텍스트를 의미하고, title 은 대화상자의 상단에 표시될 제목을 의미하며, message 는
대화상자에서 전달할 주요 메세지 문자열을 의미합니다. indeterminate 는 막대 형태의
프로그래스에서 사용하는 매개변수이고, cancelable 은 취소 버튼을 이용하여 대화상자를
종료 가능한지를 명시할 때 사용합니다.
다음은 show 메소드를 사용하여 대화상자를 실행시키는 코드입니다.
ProgressDialog dialog = ProgressDialog.show(ProgressExamAppActivity.this, "Notify!!",
"Please wait...", true, true);
위와 같이 show 메소드를 이용하여 대화상자를 실행했다면 해당 메소드가 반환한 대화상자
객체는 반드시 멤버변수로 저장해두어야 할 것입니다. 왜냐하면 프로그래스 대화상자는 일반
대화상자처럼 종료버튼을 눌러서 종료할 수 없을 뿐만 아니라 이 대화상자가 사용자에게 다른
조작을 하지말고 잠시 기다려 달라는 의미로 사용하는 것이기 때문에 다운로드가 완료되거나
설치가 완료되는 등의 어떤 조건이 되었을 때 컨텍스트에서 해당 대화상자를 종료시켜야하기
때문입니다.
아래의 코드는 show 메소드로 실행한 프로그래스 대화상자를 3초 후에 종료되도록 구성한
예제입니다.
public class ProgressExamAppActivity extends Activity
{
// 대화상자를 저장할 변수
ProgressDialog m_dialog = null;
// 3초 후에 종료시키기 위해 임의로 사용하는 핸들러
Handler m_handler = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 대화상자가 종료되는 코드를 handleMessage 메소드에 재정의하여 핸들러를 생성한다.
m_handler = new Handler() {
public void handleMessage(Message msg) {
// 대화상자를 종료시킨다.
m_dialog.dismiss();
}
};
// show_dlg_btn 이라는 ID 를 가진 버튼을 생성한다.
Button btn = (Button) findViewById(R.id.show_dlg_btn);
// 버튼을 클릭했을 때 처리할 코드를 리스너에 정의한 후 버튼에 설정한다.
btn.setOnClickListener(new OnClickListener() {

// 버튼이 클릭되면 수행할 메소드
public void onClick(View view) {
// 대화상자를 생성한 후 출력하고, 생성한 대화상자 객체를 반환한다.
m_dialog = ProgressDialog.show(ProgressExamAppActivity.this, "Notify!!",
"Please wait...", false, true);
// 3초 후에 핸들러를 수행시킨다.
m_handler.sendEmptyMessageDelayed(0, 3000);
}
});
}
}
1.2 onCreateDialog 메소드를 이용해서 대화상자 실행하기
onCreateDialog 메소드를 이용해서 대화상자를 생성하면 액티비티가 대화상자를 관리하기
때문에 대화상자의 ID 만으로 대화상자를 실행시키고, 종료시키는 것이 가능해집니다.
ProgressDialog 클래스의 show 메소드를 이용하는 방법보다는 조금 길어질 수도 있지만
자원의 재사용성이나 대화상자를 액티비티가 종료해야하는 사항들을 고려하면 이 방법이
더 좋을 수도 있습니다.
아래의 코드는 1.1 항목에서 설명한 예제와 동일한 출력 형태를 가진 예제입니다.
public class ProgressExamAppActivity extends Activity
{
// 프로그래스 대화상자 ID
static final int PROGRESS_DIALOG = 0;
// 3초 후에 종료시키기 위해 임의로 사용하는 핸들러
Handler m_handler = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 대화상자가 종료되는 코드를 handleMessage 메소드에 재정의하여 핸들러를 생성한다.
m_handler = new Handler() {
public void handleMessage(Message msg) {
// 대화상자를 종료시킨다.
dismissDialog(PROGRESS_DIALOG);
}
};
// show_dlg_btn 이라는 ID 를 가진 버튼을 생성한다.
Button btn = (Button) findViewById(R.id.show_dlg_btn);
// 버튼을 클릭했을 때 처리할 코드를 리스너에 정의한 후 버튼에 설정한다.
btn.setOnClickListener(new OnClickListener() {
// 버튼이 클릭되면 수행할 메소드
public void onClick(View view)
{
// 대화상자를 실행시킨다.
showDialog(PROGRESS_DIALOG);
// 3초 후에 핸들러를 수행시킨다.
m_handler.sendEmptyMessageDelayed(0, 3000);
}
});
}

// 대화상자를 생성할 때 수행되는 메소드
protected Dialog onCreateDialog(int id)
{
switch(id) {
// 프로그래스 대화상자인 경우
case PROGRESS_DIALOG : {
// 프로그래스 대화상자를 생성한다.
ProgressDialog dlg = new ProgressDialog(this);
// 대화상자에 제목을 설정한다.
dlg.setTitle("Notify!!");
// 대화상자에 문자열 메세지를 설정한다.
dlg.setMessage("Please wait...");
// 프로그래스의 형태를 원형으로 설정한다.
dlg.setProgressStyle(ProgressDialog.STYLE_SPINNER);
// Back 버튼으로 취소가 가능하도록 설정한다.
dlg.setCancelable(true);
// 프로그래스 대화상자를 반환한다.
return dlg;
}
}
return null;
}
}
2. 대화상자 실행 화면
위의 두가지 방법으로 코드를 구성하여 실행시키면 아래의 그림과 같은 동일한 실행 화면을 볼 수
있습니다.
Show Dilaog 버튼을 터치하면 원형 프로그래스 대화상자가 출력되며 3초 후에 대화상자가 자동으로
종료됩니다.

 

댓글