一、實現效果
通過滑動SeekBar選擇一定範圍的數字,同時進度條旁的EditText相應改變,也可通過在EditText中輸入數字改變進度條顯示。
二、XML佈局
<android.support.v7.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<android.support.v7.widget.AppCompatSeekBar
android:id="@+id/sb_pressure"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1" />
<android.support.v7.widget.AppCompatEditText
android:id="@+id/et_pressure"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:inputType="number"
android:maxLength="3"
android:layout_weight="5" />
</android.support.v7.widget.LinearLayoutCompat>
1、變量聲明
private AppCompatSeekBar sb_pressure;
private AppCompatEditText et_pressure;
private int pressure = 160, _pressure = 160;<span style="white-space:pre"> </span>// 數值
2、變量定義
sb_pressure = (AppCompatSeekBar) findViewById(R.id.sb_pressure);
et_pressure = (AppCompatEditText) findViewById(R.id.et_pressure);
四、設置監聽事件
1、初始化
sb_pressure.setProgress(0);<span style="white-space:pre"> </span>// 先將進度條滑到最左端
et_pressure.setText("80");
sb_pressure.setMax(170);<span style="white-space:pre"> </span>// 設置進度條可調節的數值範圍長度,參數爲int類型
et_pressure.setText("160");<span style="white-space:pre"> </span>// 設置初始顯示值
2、SeekBar 監聽
<span style="white-space:pre"> </span>sb_pressure.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
int p;
et_pressure.setText("" + (80+progress));<span style="white-space:pre"> </span>// 80爲進度條滑到最小值時代表的數值
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
3、EditText 監聽
<span style="white-space:pre"> </span>et_pressure.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
int p = 0;
try {
p = Integer.parseInt(s.toString());
} catch (Exception e) {
p = 0;
}
if(p<80 || p>250) {
tv_pressure.setText("充氣壓力範圍:80~250");
sb_pressure.setProgress(0);
} else {
tv_pressure.setText("");
sb_pressure.setProgress(p-80);
_pressure = p;<span style="white-space:pre"> </span>// 記錄新修改的pressure值
}
}
});