상세 컨텐츠

본문 제목

[Android]프로그레스바(ProgressBar)

Android 개발

by mobile 2012. 8. 26. 00:33

본문

반응형

▶ 프로그레스바 사용하기

프로그레스바는 작업의 진행 정도를 표시하거나 작업이 진행 중임을 사용자에게 알려주는 역할을 합니다. 이 두가지 대표적인 목적에 맞게 안드로이드에서는 두 가지 형태의 프로그레스바를 만들 수 있습니다.

 속성

설명 

막대모양 

작업의 진행 정도를 알려줄 수 있도록 막대 모야으로 표시합니다. 

style 속성의 값을 "?android:attr/progressBarSytleHorizontal'로 설정 합니다.

원 모양

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


XML레이아웃에 추가할 때는 <ProgressBar> 태그가 사용되는데, 프로그레스바가 가지는 값의 최대 범위는 max 속성으로 설정하고 현재값은 progress 속성으로 설정합니다. 진행률이 변경되면 progress 속성으로 설정되었던 값을 바꾸면 되는데 자바 코드상에서 프로그레스바의 현재값을 바꾸는 대표적인 메소드들은 다음과 같습니다.

[code]

void setProgress(int progress)

void incrementProgressBy(int diff)


setProgress() 메소드는 정수값을 받아 프로그레스바의 현재값으로 설정합니다. incrementProgressBy() 메소드는 현재 설정되어 있는 값을 기준으로 값을 더하거나 뺄 경우에 사용합니다. 프로그레스바는 항상 보일 필요가 없으므로 화면에서 차지하는 공간을 줄일 수 있도록 타이틀 바에 프로그레스바를 표시할 수도 있습니다. 이 기능은 윈도우 속성으로 정의되어 있으므로 다음과 같은 메소드를 이용해야 합니다.

[code]

requestWindowFeature(Window.FEATURE_PROGRESS);


타이틀 부분에 표시되는 프로그레스바는 범위를 따로 지정할 수없으며 디폴트값으로는 0부터 10000 사이의 값을 가질 수 있습니다. 따라서 진행률이 50%인 경우에는 프로그레스바의 현재값을 '5000'으로 설정해야 합니다. 타이틀바에 프로그레스바를 보여주는 방식은 화면의 공간을 절약하는 매우 직관적인 방식 이긴 하지만 실제 애플리케이션 구성시에는 타이틀 부분을 보이지 않게 설정하는 경우가 있으므로 사용할 수 없는 경우도 많습니다. 


▷ res/layout/main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical"

  >

<LinearLayout

android:layout_width="fill_parent" 

android:layout_height="wrap_content"  

android:orientation="horizontal"

android:layout_marginTop="10dp"

>

<ImageView 

android:id="@+id/iconItem"  

  android:layout_width="wrap_content" 

  android:layout_height="wrap_content"

  android:padding="10dp"

  android:layout_gravity="center_vertical"

  />

  <LinearLayout

android:layout_width="fill_parent" 

android:layout_height="wrap_content"  

android:orientation="vertical"

>

<ProgressBar 

    style="?android:attr/progressBarStyleHorizontal"

   android:id="@+id/progressBar01"

   android:layout_width="fill_parent"

   android:layout_height="wrap_content" 

   android:indeterminateOnly="false"

android:minHeight="20dip"

android:maxHeight="20dip" 

android:max="100"

   />

<RelativeLayout

android:layout_width="wrap_content" 

android:layout_height="wrap_content"

android:padding="5dip"

>

<TextView  

android:id="@+id/dataItem01"  

   android:layout_width="wrap_content" 

   android:layout_height="wrap_content"

   android:textSize="9pt"

   />

<TextView  

android:id="@+id/dataItem02"  

   android:layout_width="wrap_content" 

   android:layout_height="wrap_content"

   android:layout_alignParentRight="true"

android:textSize="6pt"

android:textStyle="bold"

android:paddingRight="4dip"

   />    

</RelativeLayout>   

</LinearLayout>    

</LinearLayout> 

<LinearLayout

android:layout_width="fill_parent" 

android:layout_height="wrap_content"  

android:orientation="horizontal"

<Button

android:id="@+id/btnShow"

android:layout_width="140dp"

android:layout_height="wrap_content"

android:text="보여주기"

android:textSize="20dp" 

android:textStyle="bold" 

/>

<Button

android:id="@+id/btnClose"

android:layout_width="140dp"

android:layout_height="wrap_content"

android:layout_marginLeft="20dp"

android:text="닫기"

android:textSize="20dp" 

android:textStyle="bold" 

/>

</LinearLayout>

</LinearLayout>


▷ res/layout/main.xml

import android.app.Activity;

import android.app.Dialog;

import android.app.ProgressDialog;

import android.content.res.Resources;

import android.graphics.drawable.Drawable;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.ProgressBar;

import android.widget.TextView;


public class SampleProgressBarActivity extends Activity {

public static final int PROGRESS_DIALOG = 1001;

ProgressDialog progressDialog;

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

        ProgressBar proBar = (ProgressBar) findViewById(R.id.progressBar01);

        proBar.setIndeterminate(false);

        proBar.setMax(100);

        proBar.setProgress(80);

        

        //set Icon

        ImageView icon = (ImageView) findViewById(R.id.iconItem);

        Resources res = getResources();

        Drawable drawable = (Drawable) res.getDrawable(R.drawable.apple);

        icon.setImageDrawable(drawable);

        

        TextView nameText = (TextView)findViewById(R.id.dataItem01);

        nameText.setText("사과");

        

        TextView progressText = (TextView)findViewById(R.id.dataItem02);

        progressText.setText("80%");

        

Button btnShow = (Button) findViewById(R.id.btnShow);

btnShow.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

showDialog(PROGRESS_DIALOG);

}

});

Button btnClose = (Button) findViewById(R.id.btnClose);

btnClose.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

if (progressDialog != null) {

progressDialog.dismiss();

}

}

});

    }


    public Dialog onCreateDialog(int id) {

    switch (id) {

    case (PROGRESS_DIALOG):

    progressDialog = new ProgressDialog(this);

    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);

    progressDialog.setMessage("데이터를 확인하는 중입니다.");

   

    return progressDialog;


    }

    return null;

    }

}


▷ 예제 소스

SampleProgressBar.zip


반응형

'Android 개발' 카테고리의 다른 글

[Android]메뉴 사용하기  (0) 2012.08.26
[Android]시크바 (SeekBar)  (1) 2012.08.26
[Android]페이지 슬라이딩 사용하기  (0) 2012.08.25
[Android]간단한 애니메이션 사용  (0) 2012.08.25
[Android]WebView  (0) 2012.08.18

관련글 더보기

댓글 영역