JLOG

[안드로이드 스튜디오 강좌 #17] 프로그레스바 사용하기 본문

안드로이드 스튜디오/Do it 안드로이드 스튜디오

[안드로이드 스튜디오 강좌 #17] 프로그레스바 사용하기

정정선선 2020. 5. 23. 07:09

! 목표

진행상황을 보여 줄 수 있는 프로그래스바를 사용해보자

 

 

프로그레스바를 이용해서 일의 진행 상태를 나타내 줄 수 있다.

(좌) 막대모양 (우) 원모양

*대표적인 형태의 프로그래스 바들

-막대 모양 : 작업의 진행상태를 막대 모양으로 표시, style 속성 값을 '?android:attr/progressBarStyleHorizontal'로 설정한다.

-원 모양 : 작업이 진행 중임을 알려준다. 원 모양으로 된 프로그레스 바가 반복적으로 표시된다.

 

 

XML 레이아웃에 프로그레스바를 추가할 때 <ProgressBar> 태그가 사용된다.

-max 속성 : 값의 최대 범위를 설정해준다.

-progress 속성 : 현재 진행 값을 설정해준다.

 

50%가 진행되었다면 max 속성에는 100, progress 속성에는 50를 설정해줄 수 있다. 진행률이 변경이 된다면 progress 값을 변경하면 된다.

 

 

Java 코드에서 사용되는 프로그레스바 메서드

void setProgress(int progress)
void incrementProgressBy(int diff)

 

-setProgress() : 정수 값을 받아 프로그레스바의 현재 값으로 설정

-incrementProgressBy() : 현재 설정되어 있는 값을 기준으로 값을 더하거나 뺄 때 사용한다.

 

 

프로그래스바를 항상 보일 필요가 없으므로 화면에서 차지하는 공간을 줄이기 위해 타이틀바에 프로그레스바를 표시할 수도 있다.

requestWindowFeature(Window.FEATURE_PROGRESS);

타이플 부분에 표시되는 프로그레스바는 범위를 따로 지정할 수 없으며, 0~10000 사이의 값을 가질 수 있다.

진행상황이 50%라면 프로그레스의 현재 값을 5000로 설정해야 한다.

 

 

 

-실습

프로그래스바를 사용하기 위해 SampleProgress 프로젝트를 생성하자

activity_main.xml 파일에서 텍스트뷰는 삭제하고, Component Tree에서 최상위 레이아웃을 LinearLayout(vertical)로 설정하자.

 

Palette 창의 Widgets-ProgressBar(Horizontal)을 찾아 화면에 끌어 놓고, max 속성을 100으로 설정하자.

 

프로그래스바 아래 두개의 버튼을 두기 위해 LinearLayout(Horizontal)을 추가 한 후, 각각 text 속성을 '보여주기', '닫기'로 변경하자.

'보여주기' 버튼은 프로그레스바를 대화상자로 보여주고, '닫기' 버튼은 그 대화상자를 닫아주는 역할을 할 것이다.

 

 

이제 MainActivity.java 파일을 열고 다음과 같이 입력하자.

package org.techtowm.sampleprogress;

import androidx.appcompat.app.AppCompatActivity;

import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;

public class MainActivity extends AppCompatActivity {
    ProgressDialog dialog;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ProgressBar progressBar = findViewById(R.id.progressBar);
        progressBar.setIndeterminate(false);
        progressBar.setProgress(80);
        
        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener(){
            public void onClick(View view){
                dialog = new ProgressDialog(MainActivity.this);
                dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                dialog.setMessage("데이터를 확인하는 중입니다.");
                
                dialog.show();
            }
        });
        
        Button button2 = findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener(){
            public void onClick(View view){
                if (dialog != null){
                    dialog.dismiss();
                }
            }
        });
    }
}

 

*코드 설명

        ProgressBar progressBar = findViewById(R.id.progressBar);
        progressBar.setIndeterminate(false);
        progressBar.setProgress(80);

프로그레스바는 진행상태를 표시함에 있어 불확정적(indeterminate) 상태 표시 모드와 확정적(determinate) 상태 표시 모드가 있다.

 

-확정적(determinate) 상태 표시 모드 : 진행 상태를 표시할 때 명확한 수치 또는 범위 값을 지정하여 현재의 진행 단계를 표시

-불확정적(indeterminate) : 명확한 수치 또는 범위 값을 사용하지 않고 막연히 작업이 진행되고 있음을 표시

 

setIndeterminate는 명확한 수치, 범위 값을 사용할지 말지 설택하는 것이고, false로 설정되어 있으니 명확한 수치, 범위 값을 지정한다는 것이다.

 

프로그레스바의 진행상태를 setProgress를 이용해서 80%으로 설정해주자.

 

 

 

        button.setOnClickListener(new View.OnClickListener(){
            public void onClick(View view){
                dialog = new ProgressDialog(MainActivity.this);
                dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                dialog.setMessage("데이터를 확인하는 중입니다.");
                
                dialog.show();
            }

'보여주기' 버튼을 클릭하면 progressDialog 대화상자가 표시 된다.

멈추지 않는 프로그레스바를 대화상자 안에서 보여주기 위해 ProgressDialog 객체를 만들고,

동그란 스타일로 보여주기 위해 ProgressDialog.STYLE_SPINNER로 설정하고, 같이 띄울 메세지를 setMessage를 사용해 설정해준다.

 

 

 

        Button button2 = findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener(){
            public void onClick(View view){
                if (dialog != null){
                    dialog.dismiss();
                }
            }
        });

'삭제' 버튼을 클릭하면 대화상자가 dismiss로 인해 닫히도록 설정할 수 있다.

어떤 이벤트가 발생했을 때 대화상자를 표시하게 하고 싶지 않으면 dismiss()를 사용하면 된다.

 

 

 

실행시켜 확인해보면,

80%으로 설정된 프로그레스바를 확인할 수 있다.

'보여주기' 버튼을 누르면 대화상자에 원형 프로그레스바가 나타나는 것을 확인할 수 있다.

뒤로가기 버튼을 누르거나 대화상자 이외의 화면 영역을 누르면 대화상자를 닫을 수 있다.

 

 

 

 

 

## 이 글은 Do it 안드로이드 앱 프로그래밍을 참고해서 작성되었습니다.

도서에는 더 자세하고 알기 쉽게 설명이 되어 있어 도서를 참고하면서 공부하는 것을 추천드립니다.

도서 정보 : http://www.yes24.com/Product/Goods/15789466

 

Do it! 안드로이드 앱 프로그래밍

안드로이드 분야 1위 도서, 개정 2판으로 돌아오다! (롤리팝, 안드로이드 스튜디오)안드로이드 분야에서 큰 사랑을 받아온 [Do it! 안드로이드 앱 프로그래밍]의 두 번째 전면 개정판이 나왔다. 최신 롤리팝 버전을 적용한 이번 개정 2판은 지난 젤리빈 개정판보다 더 개정폭이 커졌다. 특히 2014년 12월 발표된 안드로이드 공식 개발 도구인 ‘안드...

www.yes24.com

유투브 강의 : https://www.youtube.com/watch?v=nN4xnEcnjE8

Comments