我想要将 SeekBar 的最大值和最小值分别设置为50和20。
SeekBar 直接提供了设置最大值的选项,但是如何将其最小值设置为20而不是0?
在 SeekBar 中,你只能设置最大值。
<SeekBar android:id="@+id/SeekBar01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="50"/>
而且,你不能直接将最小值设置为 SeekBar。
SeekBar mSeekbar = (SeekBar) findViewById(R.id.SeekBar01);
mSeekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
{
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
{
length_edit.setText(Integer.toString(progress + 20));
}
public void onStartTrackingTouch(SeekBar seekBar) {}
public void onStopTrackingTouch(SeekBar seekBar) {}
});
当你看到最小的进展时,你可以将其与最小值相加,就像我想在你的情况下添加 20 一样。
将最大值设置为30,并在从SeekBar读取的值上加20。
setMin()
:https://developer.android.com/reference/android/widget/AbsSeekBar.html#setMin(int)。 - JimSeekBar.OnSeekBarChangeListener()
中限制它,为你的SeekBar
设置最小值或默认值字段。SeekBar
时设置此值:private int fillDefault;
Fragment
的onCreateView()
或Activity
的onCreate()
中:fillDefault = 20;
fillSeekBar.setProgress(fillDefault);
其次,实现它的监听器:
fillSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// Notification that the progress level has changed.
if (progress < fillDefault){
seekBar.setProgress(fillDefault); // magic solution, ha
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// Notification that the user has started a touch gesture.
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// Notification that the user has finished a touch gesture.
}
});
它能够运作。简单而神奇:D
public static int LENGTH_MIN_VALUE = 20;
public static int LENGTH_MAX_VALUE = 50;
SeekBar seekBar = (SeekBar) findViewById(R.id.passwordSeekBar);
seekBar.setMax(LENGTH_MAX_VALUE);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if(progress <= Constract.PASSWORD_LENGTH_MIN_VALUE){
progress = Constract.PASSWORD_LENGTH_MIN_VALUE + progress;
}
String numberAsString = String.valueOf(progress);
seekNumberView.setText(numberAsString);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
});
seekBar.setMax(max_value-min_value);