반응형
안드로이드(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 |