Tôi muốn đặt giới hạn tối đa và tối thiểu là Tìm kiếm lần lượt là thành 50 và 20.cách giới hạn thanh tìm kiếm
SeekBar có đầu tùy chọn trực tiếp cung cấp giá trị tối đa, nhưng cách đặt giá trị tối thiểu là 20 chứ không phải 0?
Tôi muốn đặt giới hạn tối đa và tối thiểu là Tìm kiếm lần lượt là thành 50 và 20.cách giới hạn thanh tìm kiếm
SeekBar có đầu tùy chọn trực tiếp cung cấp giá trị tối đa, nhưng cách đặt giá trị tối thiểu là 20 chứ không phải 0?
Trong SeekBar bạn can set only max value.
<SeekBar android:id="@+id/SeekBar01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="50"/>
Và, Bạn có thể không trực tiếp thiết lập giá trị tối thiểu cho 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) {}
});
Như bạn thấy sự tiến bộ tối thiểu bạn có thể tóm tắt bằng phút mà tôi muốn - trong trường hợp của bạn 20.
Đặt giá trị tối đa thành 30 và thêm 20 vào giá trị bạn đã đọc từ SeekBar.
Đây là câu trả lời duy nhất không ảnh hưởng đến mức tối đa mong muốn – Flynny75
Cách đơn giản nhất để làm điều này là chỉ hạn chế nó trong SeekBar.OnSeekBarChangeListener()
cho SeekBar
của bạn.
Trước tiên, bạn cần tạo trường bằng giá trị tối thiểu hoặc giá trị mặc định. Sau đó thiết lập giá trị này khi tạo SeekBar
:
private int fillDefault;
Trong onCreateView()
của một Fragment
hoặc onCreate
của một Activity
:
fillDefault = 20;
fillSeekBar.setProgress(fillDefault);
Thứ hai, thực hiện người nghe cho nó:
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.
}
});
Nó hoạt động . Đơn giản và tuyệt vời: D
Giải pháp này lý tưởng khi bạn đặt padding sang 0dp và muốn tránh ngón tay cái chồng lên cuối thanh tìm kiếm tức là: if (progress == 0) { seekBar.setProgress (1); } – PedroHidalgo
Bạn có thể thử này:
seekBar.setMax(max_value-min_value);
Ví 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) {}
});
Tôi đã trả lời câu hỏi này ở đây: How to set seekbar min and max value.
Với phép toán đơn giản, bạn có thể đặt giá trị tối thiểu, giá trị tối đa và thậm chí là bước của thanh tìm kiếm của bạn.
Hy vọng điều này sẽ hữu ích!
Cảm ơn bạn đã gửi mã ur, nó hoạt động, ngoại trừ thực tế là, tôi đang sử dụng textview để đặt giá trị progrees, ứng dụng bị lỗi. – iscavengers
xin lỗi dude, waz khi rời đi, dats y didnt respond..i upvoted và aaccepeted d answer ... thưởng thức – iscavengers
@Paresh: Nice logic để đặt Giá trị tối thiểu để tìm kiếm. Tuyệt quá. . . –