반응형
|
안드로이드(Android) ProgressDialog 숫자 상태정보 퍼센트(Percentage) 로 표현하는 방법 |
|
환경 : Eclipse Mars, Android 4.2.2 |
ProgressDialog 의 진행막대에 표시되는 숫자값을 퍼센트와 동일하게 바꾸는 방법에 대해 알아 보겠습니다. % 는 전체 진행정도를 알려주고 오른쪽에 숫자는 전체값에서 얼마나 진행되었는지 실제 값을 나타내죠. 이 두개를 동일하게 표현하고 싶을 때가 있습니다.
▼ 아래 그림처럼 왼쪽 % 값과 오른쪽에 숫자값을 동일하게 맞출려고 합니다.
▼ 먼저 진행바를 셋팅하기 위해 AsyncTask 의 시작 함수인 onPreExecute() 에 ProgressDialog 객체 속성값을 셋팅하고 띄웁니다.
ProgressDialog asyncDialog = new ProgressDialog(
ProgressDialogActivity.this);
@Override
protected void onPreExecute() {
asyncDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
asyncDialog.setMessage("로딩중입니다..");
// show dialog
asyncDialog.show();
super.onPreExecute();
}
▼ 보통 AsyncTask 의 진행중일 때 호출되는 콜백함수인 doInBackground() 에 진행바의 숫자값을 셋팅합니다. setProgress() 함수의 인수로 값을 넘기면 표시가되는데 이번에는 publishProgress() 함수를 사용하겠습니다.
@Override
protected String doInBackground(String... arg0) {
try {
for (int i = 0; i < 5; i++) {
//asyncDialog.setProgress(i * 30);
publishProgress(""+(int)(i * 30));
Thread.sleep(500);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
▼ publishProgress () 실행하면 내부적으로 onProgressUpdate() 함수가 호출됩니다.이 콜백함수 내부를 구현하시면 됩니다. 넘어온 값을 setProgress() 의 인수로 셋팅하면 % 값과 오른쪽에 있는 실제 수치가 일치하게 되죠.
protected void onProgressUpdate(String... progress) {
Log.d("ANDRO_ASYNC",progress[0]);
asyncDialog.setProgress(Integer.parseInt(progress[0]));
}
▼ 이렇게 완성된 메인 Activity 의 전체 소스 입니다.
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class ProgressDialogActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_progress_dialog);
Button button = (Button) findViewById(R.id.btn_alert);
// 클릭 이벤트
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
CheckTypesTask task = new CheckTypesTask();
task.execute();
}
});
}
private class CheckTypesTask extends AsyncTask<String, String, String> {
ProgressDialog asyncDialog = new ProgressDialog(
ProgressDialogActivity.this);
@Override
protected void onPreExecute() {
asyncDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
asyncDialog.setMessage("로딩중입니다..");
// show dialog
asyncDialog.show();
super.onPreExecute();
}
@Override
protected String doInBackground(String... arg0) {
try {
for (int i = 0; i < 5; i++) {
//asyncDialog.setProgress(i * 30);
publishProgress(""+(int)(i * 30));
Thread.sleep(500);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
protected void onProgressUpdate(String... progress) {
Log.d("ANDRO_ASYNC",progress[0]);
asyncDialog.setProgress(Integer.parseInt(progress[0]));
}
@Override
protected void onPostExecute(String result) {
asyncDialog.dismiss();
super.onPostExecute(result);
}
}
}
반응형
'안드로이드 개발' 카테고리의 다른 글
| 안드로이드(Android) 라이브러리 프로젝트 참조 만들기 (0) | 2020.06.23 |
|---|---|
| 안드로이드 Android 앱 배포를 위한 개발자 등록하기 (0) | 2020.05.01 |
| 안드로이드 개발 중복 리소스가 나타나서 에러가 발생하는 경우 Multiple implementations resource (0) | 2020.04.08 |
| 안드로이드(Android) ProgressDialog Cancel Button 추가하는 방법 (0) | 2020.03.15 |
| 안드로이드(Android) 스레드(Thread) 이용한 ProgressDialog 구현하기 (0) | 2020.01.26 |
| 안드로이드(Android) 이미지 드래그 앤 드랍(Drag and Drop) 하는 방법 (3) | 2019.12.01 |
| 안드로이드(Android) ImageView 사이즈(size) 조절하는 방법 (1) | 2019.11.11 |
| 안드로이드(Android) 가로 세로 모드 자동회전 고정하는 방법 (0) | 2019.10.30 |
