상세 컨텐츠

본문 제목

[Android]프로그레스바 이벤트

Android 개발

by mobile 2013. 3. 31. 23:47

본문

반응형

프로그래스바의 모양은 다음과 같은 스핀휠 스타일과 막대형 수평 프로그래스바 스타일 두 종류를 제공한다.

- progressBarStyle : 기본으로 중간 크기의 스핀휠(디폴트)

- progressBarStyleSmall : 작은 크기의 스핀휠

- progressBarStyleLarge : 큰 크기의 스필휠

- progressBarStyleHorizontal : 막대형 수평 프로그레스바


스핀휠 스타일은 단지 스핀휠 크기만을 제공하는데 반해 막대형 수평 프로그레스바은 좀더 복잡한 기능을 제공한다.

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

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

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    <ProgressBar 

        style="?android:attr/progressBarStyleSmall"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content" />

    <ProgressBar 

        style="?android:attr/progressBarStyle"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content" />

    <ProgressBar 

        style="?android:attr/progressBarStyleLarge"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content" />

    <ProgressBar 

        style="?android:attr/progressBarStyleHorizontal"

        android:layout_width="200dip"

        android:layout_height="20dip"

        android:max="100"

        android:progress="50"

        android:secondaryProgress="75" />

</LinearLayout>


막대형 수평 프로그레스바 속성은 다음과 같다.

- android:max : 프로그레스의 진행 범위를 언급하지 않는다면 범위는 0부터 10,000을 갖게 된다. 따라서 보통 퍼센트(100%)로 진행을 표시한다면 android:max 속성값으로 100을 주게된다.

- android:progress : 현재 진척도를 나태내는 값이다.

- android:secondaryProgress : 하나의 프로그레스바는 막대바에 좀더 밝은 색상의 첫번째 진척도 progress와 다소 어두운 색상의 두번째 진척도 등으로 두 종류의 진척도를 제공한다. 따라서 android:secondary Progress 속성은 두 번째 진척도를 나타낸다.


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

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

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:orientation="vertical" >

    <ProgressBar android:id="@+id/progress_horizontal"

        style="?android:attr/progressBarStyleHorizontal"

        android:layout_width="200dip"

        android:layout_height="20dip"

        android:max="100"

        android:progress="50"

        android:secondaryProgress="75" />

    <TextView 

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="@string/progressbar_text_01" />

    <LinearLayout 

       android:layout_width="match_parent"

       android:layout_height="wrap_content"

       android:orientation="horizontal" >

       <Button android:id="@+id/decrease"

           android:layout_width="wrap_content"

           android:layout_height="wrap_content"

           android:text="@string/minus" />

       <Button android:id="@+id/increase"

           android:layout_width="wrap_content"

           android:layout_height="wrap_content"

           android:text="@string/plus" /> 

    </LinearLayout>

    <TextView 

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="@string/progressbar_text_02" />

    <LinearLayout 

       android:layout_width="match_parent"

       android:layout_height="wrap_content"

       android:orientation="horizontal" >

       <Button android:id="@+id/decrease_secondary" 

          android:layout_width="wrap_content"

          android:layout_height="wrap_content"

          android:text="@string/minus" />

       <Button android:id="@+id/increase_secondary" 

           android:layout_width="wrap_content"

           android:layout_height="wrap_content"

           android:text="@string/plus" />

    </LinearLayout> 

</LinearLayout>


package com.example.test_sample_02;


import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.Window;

import android.widget.Button;

import android.widget.ProgressBar;


public class ManualProgressBar extends Activity {


@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);


requestWindowFeature(Window.FEATURE_PROGRESS);

setContentView(R.layout.progressbar_ex_02);


final ProgressBar progressHorizontal = (ProgressBar) findViewById(R.id.progress_horizontal);

// 타이틀바 진척도의 범위는 0 ~ 10,000

setProgress(progressHorizontal.getProgress() * 100);

setSecondaryProgress(progressHorizontal.getSecondaryProgress() * 100);

// 버튼에 발생하는 이벤트

Button button = (Button) findViewById(R.id.increase);

button.setOnClickListener(new Button.OnClickListener() {


@Override

public void onClick(View arg0) {

// TODO Auto-generated method stub

progressHorizontal.incrementProgressBy(1);

setProgress(100 * progressHorizontal.getProgress());

}

});

button = (Button)findViewById(R.id.decrease);

button.setOnClickListener(new Button.OnClickListener() {


@Override

public void onClick(View v) {

// TODO Auto-generated method stub

progressHorizontal.incrementProgressBy(-1);

setProgress(100 * progressHorizontal.getProgress());

}

});

button = (Button)findViewById(R.id.increase_secondary);

button.setOnClickListener(new Button.OnClickListener() {


@Override

public void onClick(View v) {

// TODO Auto-generated method stub

progressHorizontal.incrementSecondaryProgressBy(1);

setSecondaryProgress(100 * progressHorizontal.getSecondaryProgress());

}

});

button = (Button)findViewById(R.id.decrease_secondary);

button.setOnClickListener(new Button.OnClickListener() {


@Override

public void onClick(View v) {

// TODO Auto-generated method stub

progressHorizontal.incrementProgressBy(-1);

setSecondaryProgress(100 * progressHorizontal.getSecondaryProgress());

}

});

}

}


[결과]



Activity.requestWindowFeature(int featureId) 메서드는 기본 패턴으로 제공하는 화면을 자신이 원하는 방식으로 구성하겠다는 것을 안드로이드의 프레임워크인 윈도우 매니저에게 알리는 기능을 한다. 여기서는 "타이틀바를 프로그레스바로 변경하겠다"는 내용을 알렸다. getWindow().requestFeature() 메서드와 동일한 기능을 수행하는 요약 메서드이다.


윈도우 매니저에게 요구하는 기능은 아래와 같이 android.view.Window클래스 내 상수로 정의 되어 있다. 상수는 requestWindowFeature() 메서드의 매개 변수로 제공되며, 정상적으로 적용되면 true를 반환한다.


- android.view.Window 클래스에서 제공하는 상수

 특징(Feature) ID

설 명 

DEFAULT_FEATURES 

윈도우 디폴트 

FEATURE_CONTEXT_MENU 

콘텍스트 메뉴를 위한 윈도우이다. 

FEATURE_CUSTOM_TITLE 

사용자가 만든 타이틀바를 위한 윈도우이다. 

FEATURE_LEFT_ICON 

타이틀바 왼쪽에 아이콘을 갖는 윈도우이다. 

FEATURE_RIGHT_ICON 

타이틀바 오른쪽에 아이콘을 갖는 윈도우이다. 

FEATURE_NO_TITLE 

화면 위쪽에 타이틀바를 제거하여 전체 화면을 사용한다. 

FEATURE_OPTIONS_PANEL 

옵션 팬널을 만든다 

FEATURE_PROGRESS 

진행 사항을 나타내는 윈도우이다. 


android.app.Activity 클래스는 타이틀바의 프로그레스바를 위해 아래와 같은 메서드를 제공하고 있다.

- public final void setProgressBarVisibility (boolean visible)

: 타이틀 바에 프로그레스바가 보이도록 하는 메서드이다. 사전에 requestWindowFeature(int) 메서드의 호출이 있어야 한다.


- public final void setProgress(int progress)

: 타이틀바 내 프로그래스바의 진척도를 나타낸다. Activity 클래스는 ProgressBar 클래스와 달리 setMax() 메서드를 제공하지 않는다. 따라서 진척도의 범위는 디폴트로 0부터 10,000으로 설정된다.


- public final void setSecondaryProgress(int secondaryProgress)

: 타이틀바 내 프로그래스바의 두 번째 진척도를 나타낸다.


- public synchronized int getProgress()

: 프로그레스바의 진척도를 읽는다.


- public synchroized int getSecondaryProgress()

: 프로그레스바의 두 번째 진척도를 읽는다.


- public final synchronized void incrementProgressBy(int diff)

: 주어진 매개변수의 진척도를 추가하여 새로운 진척도를 만든다. 위의 메서드는 setProgress(getProgress() + diff)와 동일하다.


- public final synchronized void incrementSecondaryProgressBy (int diff)

: 주어진 매개변수의 진척도를 추가하여 새로운 두 번째 진척도를 만든다.

반응형

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

[Android]화면 터치와 모션 이벤트  (0) 2013.04.06
[Android] 이벤트 핸들러  (0) 2013.04.03
[Android]RatingBar 이벤트  (0) 2013.03.31
[Android] SeekBar event  (0) 2013.03.24
[android]라디오 그룹 이벤트  (0) 2013.03.10

관련글 더보기

댓글 영역