프로그래스바의 모양은 다음과 같은 스핀휠 스타일과 막대형 수평 프로그래스바 스타일 두 종류를 제공한다.
- 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]화면 터치와 모션 이벤트 (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 |
댓글 영역