프로그레스 다이어로그 (Progress Dialog)

작업시간이 많이 소요되는 경우 Progress Dialog를 이용하여 사용자에게 알려주면 효과적이다.


작업절차 


1.showDialog(); 메소드로 대화상자 호출

2.Thread 의 run()에서 지정된 시간이 지나면 대화상자가 종료되게 한다.

3.onCreateDialog()에 보여질 대화상자를 꾸민다.



1. 레이아웃

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.progdv.progressdialog.MainActivity">

<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<Button
android:id="@+id/btnWheel"
android:text="네트워크 접속"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

</LinearLayout>


</RelativeLayout>





2. 실행 클래스


package com.progdv.progressdialog;

import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

Button btnWheel;

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

btnWheel = (Button)findViewById(R.id.btnWheel);
btnWheel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDialog(1); // 대화상자 호출

}
});
}

@Override
protected Dialog onCreateDialog(int id) {
ProgressDialog dialog = new ProgressDialog(this); // 사용자에게 보여줄 대화상자
dialog.setTitle("작업중...");
dialog.setMessage("잠시만...");
dialog.setButton(ProgressDialog.BUTTON_NEGATIVE, "취소",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {

}
}
);

return dialog;
}
}




버튼을 누르면 휠 모양으로 회전하는 창이 뜬다.





자동으로 일정 시간이 지나면 창이 닫히는 기능 추가


2-1) 메인 클래스


package com.progdv.progressdialog;

import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {

Button btnWheel;

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

btnWheel = (Button)findViewById(R.id.btnWheel);
btnWheel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDialog(1); // 대화상자 호출

Thread thread = new Thread(new Runnable() {
@Override
public void run() {
// 3초가 지나면 다이얼로그 닫기
TimerTask task = new TimerTask(){
@Override
public void run() {
removeDialog(1);

}
};

Timer timer = new Timer();
timer.schedule(task, 3000);
}
});
thread.start();

}
});
}

@Override
protected Dialog onCreateDialog(int id) {
ProgressDialog dialog = new ProgressDialog(this); // 사용자에게 보여줄 대화상자
dialog.setTitle("작업중...");
dialog.setMessage("잠시만...");
dialog.setButton(ProgressDialog.BUTTON_NEGATIVE, "취소",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {

}
}
);

return dialog;
}
}


스레드를 생성하여 동작을 시키며 일정 시간 후 액션을 취하게끔 구성을 취하면 버튼을 누르고 3초가 지나면 창이 저절로 닫힌다.









Posted by netyhobby
,