學習兩種顯示條,ProgressBar用於output,SeekBar用於Input。
ProgressBar
1)Android XML檔案
... ...
<ProgressBar android:id="@+id/c81_firstBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:max="200" <!-- 預設為100 -->
android:visibility="gone"/>
<!-- gone和invisible都是 當前不可視-,但是invisible在排版上保留了widget的空間,gone不保留 -->
<ProgressBar android:id="@+id/c81_secondBar"
style="?android:attr/progressBarStyle"
... ... />
<ProgressBar android:id="@+id/c81_thirdBar"
style="?android:attr/progressBarStyleLarge"
... ... />
<ProgressBar android:id="@+id/c81_forthBar"
style="?android:attr/progressBarStyleSmall"
...... />
<Button android:id="@+id/c81_myButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Begin" />
... ...
我們注意到style的設定方法,查看Android的reference的Progress中,我們在XML attributes中查到有四種style,我們分別設定了4個progressbar來進行實驗。
2)原始碼
ProgressBar比較容易,我們需要瞭解它的一些基本操作,見下面粗體部分。
//在OnCreate()中,設定layout,然後通過ID找到 firstBar,secondBar,thirdBar, fourthBar, Button,此步驟略去
// firstBar.setIndeterminate(true);
/* 設定progressbar無效*/
button.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
if (precent == 0){
firstBar.setProgress(0);
firstBar.setSecondaryProgress(0);
secondBar.setProgress(0);
firstBar.setVisibility(View.VISIBLE);
secondBar.setVisibility(View.VISIBLE);
thirdBar.setVisibility(View.VISIBLE);
forthBar.setVisibility(View.VISIBLE);
precent += 10;
}else if(precent <= firstBar.getMax()){
//當然在這個例子中Max為200,也可以直接寫為200,但是建議使用getMax()
firstBar.setProgress(precent);
//也可以使用 firstBar.incrementProgressBy(10);
firstBar.setSecondaryProgress(precent + 10);
// secondBar.setProgress(precent);
/* 測試證明此此不起作用,包括thirdBar, fourthBar*/
precent += 10;
}else{
firstBar.setVisibility(View.GONE);
secondBar.setVisibility(View.GONE);
thirdBar.setVisibility(View.GONE);
forthBar.setVisibility(View.GONE);
precent = 0;
}
}
});
如所示,先看第一個progressbar,style為progressBarStyleHorizontal右圖設定了無效,即firstBar.setIndeterminate(true)。如果設定了無效,則setProgress()無法起作用。進度條允許設定兩個進度setProgress()和setSencondaryProgress(),後者顏色淺一些。一般我們使用一個進度條。後面三個style分別為progressBarStyle,progressBarStyleLarge和progressBarStyleSmall。這三個都是表示正在執行過程,只是顯示的大小尺寸不一樣。這三個style,setProgress()是不起作用的。
SeekBar
progressbar使用與顯示進度,或者通知使用者正在執行,避免因執行時間過長使用者以為程式出問題,屬於Output,而SeekBar屬於Input,看獲得使用者手指滑動或者點擊在進度條的位置。我們在上面一個例子後面增加。
1)Android XML檔案
<SeekBar android:id="@+id/c81_seekbar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<TextView android:id="@+id/c81_info"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
2)原始碼
info = (TextView)findViewById(R.id.c81_info);
seekbar = (SeekBar)findViewById(R.id.c81_seekbar);
//seekbar通過setOnSeekBarChangeListener()設定觸發方法,對onProgressChanged()進行處理
seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
int progess = arg0.getProgress();
//getProgress( )獲得當前的位置
info.setText("Progress is "+ progess + (arg2 ? " Trigger" : " Nontrigger") + " by user.");
}
public void onStartTrackingTouch(SeekBar arg0) {
// nothing to do
}
public void onStopTrackingTouch(SeekBar arg0) {
// nothing to do
}
});
相關連結:我的Andriod開發相關文章