Tôi có một thanh tìm kiếm, trong khi di chuyển nó, tôi muốn thay đổi các giá trị từ 0 đến 200. Tôi có một TextView, nơi tôi hiển thị các giá trị đó trong khi di chuyển thanh tìm kiếm. Nhưng tôi không muốn có mọi giá trị từ khoảng thời gian đó (0,1,2,3,4,5 ...), nhưng có 10, 20, 30 ... cứ thế. Vì vậy, khi tôi di chuyển thanh tìm kiếm, tôi muốn hiển thị 10,20,30,40 .... đến 200. Ai đó có thể cho tôi một gợi ý hoặc một ví dụ làm thế nào để làm điều này?Thay đổi giá trị bước trong thanh tìm kiếm?
Trả lời
Hãy thử mã dưới đây
SeekBar seekBar = (SeekBar)layout.findViewById(R.id.seekbar);
seekBar.setProgress(0);
seekBar.incrementProgressBy(10);
seekBar.setMax(200);
TextView seekBarValue = (TextView)layout.findViewById(R.id.seekbarvalue);
seekBarValue.setText(tvRadius.getText().toString().trim());
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
progress = progress/10;
progress = progress * 10;
seekBarValue.setText(String.valueOf(progress));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
setProgress(int)
được sử dụng để thiết lập giá trị bắt đầu của thanh tìm kiếm
setMax(int)
được sử dụng để thiết lập giá trị tối đa tìm kiếm thanh
Nếu bạn muốn đặt ranh giới của thanh tìm kiếm, sau đó bạn có thể kiểm tra giá trị thanh tiến trình theo phương pháp onProgressChanged
. Nếu tiến trình nhỏ hơn hoặc lớn hơn ranh giới thì bạn có thể đặt tiến trình đến ranh giới bạn đã xác định.
Bạn nên sử dụng SeekBar.OnSeekBarChangeListener
để theo dõi thay đổi tiến độ. Hãy gọi mseek.setMax(200)
. Thực hiện thao tác modulo trên giá trị hiện tại để quyết định xem textview có nên được cập nhật hay không.
SeekBar.OnSeekBarChangeListener() {
void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (progress % 10 == 0) {
textview.setText(""+progress);
}
}
}
Điều này có thể sẽ bỏ qua các giá trị nếu thanh không phải là rất rộng và/hoặc ngón tay của bạn di chuyển nhanh. –
Đồng ý. Đây là điều đầu tiên tôi nghĩ đến. và đúng không phải là câu trả lời đúng. – Ronnie
Đây là một ví dụ hay, nhưng @Kris Van Bael là đúng, - nó bỏ qua các giá trị. – lomza
Cách easieset tôi có thể nghĩ ra, chỉ đơn giản là xác định:
SeekBar yourSeekBar = (SeekBar)findViewById(R.id.yourSeekBarId);
yourSeekbar.setMax(20);
Tiếp theo, ghi đè lên các phương pháp đó (các phương pháp có sản phẩm nào cũng được yêu cầu, ngay cả khi họ đang có sản phẩm nào):
yourSeekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
if (progress >= 0 && progress <= sizeSeekBar.getMax()) {
String progressString = String.valueOf(progress * 10);
yourTextView.setText(progressString); // the TextView Reference
seekBar.setSecondaryProgress(progress);
}
}
}
});
Ý tưởng là chỉ xác định 20 giá trị cho thanh tìm kiếm, nhưng luôn nhân giá trị bằng 10 và hiển thị giá trị đó. Nếu bạn không thực sự cần 200 giá trị, thì không có điểm nào khi sử dụng 200 giá trị.
+1 để đơn giản. Tôi đã tìm kiếm một vấn đề khác, kết thúc ở đây, nhưng nghĩ rằng bạn xứng đáng với +1 –
Điều này có vẻ như là giải pháp tốt hơn cho chắc chắn. Tôi thích làm thế nào nó nhảy ngay đến số tiếp theo. Tiến bộ trong khi con số là tĩnh chỉ có vẻ lạ. –
cho vấn đề tối thiểu, bạn có thể đặt bù đắp cho tiến độ của mình. Bằng cách này, người dùng không thể đi theo giá trị tối thiểu của bạn.
int offset = 10;
seekBar seekBar = (SeekBar)layout.findViewById(R.id.seekbar);
seekBar.setProgress(0);
seekBar.setMax(190); //with the offset, you need to adapt the max value
TextView seekBarValue = (TextView)layout.findViewById(R.id.seekbarvalue);
seekBarValue.setText(""+(seekBar.getProgress() + offset));
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
progress += offset;
seekBarValue.setText(String.valueOf(progress));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
Bạn cũng có thể đạt được điều này bằng cách định nghĩa lớp tùy chỉnh SeekBar như sau
public class CustomSeekBar extends AppCompatSeekBar {
int SEEKBAR_MULTIPLIER = 1;
public CustomSeekBar(Context context) {
super(context);
}
public CustomSeekBar(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomSeekBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public void setSeekBarConfig(int SEEKBAR_MULTIPLIER, int SEEKBAR_MAX){
setMax(SEEKBAR_MAX);
this.SEEKBAR_MULTIPLIER = SEEKBAR_MULTIPLIER;
}
@Override
public int getProgress() {
return super.getProgress() * SEEKBAR_MULTIPLIER;
}
}
Và có thể sử dụng bằng cách làm theo cách
CustomSeekBar mCustomSeekBar = (CustomSeekBar) findViewById(R.id.customSeekBar);
mSeekBar.setSeekBarConfig(10,20);
Trong xml bạn nên thêm CustomSeekBar thay vì SeekBar
<*.CustomSeekBar
com.quemb.qmbform.view:setSeekBarConfig="10"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/seekBar" />
Vì vậy, bạn có thể tái sử dụng searchBar tùy chỉnh trong toàn bộ ứng dụng với lặp lại toàn bộ phép tính bổ sung.
- 1. tìm kiếm và thay thế giá trị trong PHP mảng
- 2. Thay đổi màu văn bản của thanh tìm kiếm ios
- 3. Tìm kiếm và thay thế nhiều giá trị bằng nhiều giá trị khác nhau trong PHP5?
- 4. Tìm kiếm đơn giản theo giá trị?
- 5. Lucene - tìm kiếm trường giá trị số
- 6. Tìm kiếm JS trong các giá trị đối tượng
- 7. Sử dụng giá trị đăng ký làm mẫu tìm kiếm
- 8. Tìm kiếm giá trị trong cột BLOB trong MySQL
- 9. Cách thay đổi âm lượng thiết bị từ thanh tìm kiếm trong android
- 10. Làm cách nào để thay đổi màu của ngón tay cái trong thanh tìm kiếm?
- 11. Tìm kiếm hai giá trị [-50, 0, 50]
- 12. cách giới hạn thanh tìm kiếm
- 13. Cách tìm kiếm Mảng cho nhiều giá trị trong PHP?
- 14. IntelliJ Idea - tìm kiếm giá trị trong trình gỡ lỗi
- 15. thay đổi giá trị const trong C
- 16. Thay đổi một giá trị trong SQLite3
- 17. Android - Thay đổi giá trị trong strings.xml
- 18. giá trị thay đổi trong HashSet
- 19. Tìm kiếm lưới thanh lịch trong python/numpy
- 20. Thay đổi giá trị max_heap_table_size?
- 21. Giá trị thay đổi SQL
- 22. Tìm kiếm theo nhiều giá trị trong khóa/giá trị redis
- 23. Giá trị cháy JListChỉ thay đổi hai lần khi giá trị được thay đổi qua chuột
- 24. Thay đổi giá trị boolean trong hàm lớp trong java
- 25. Thanh tìm kiếm tăng chiều cao
- 26. tùy biến thanh tìm kiếm android,
- 27. Caret Tìm kiếm và thay thế trong Bash shell
- 28. Tắt các thay đổi trên thanh tìm kiếm của khách hàng
- 29. Thay đổi giá trị bên trong vòng lặp foreach không thay đổi giá trị trong mảng được lặp qua
- 30. Cách thay đổi màu tìm kiếm trong Android?
Ồ, đây chỉ là một ví dụ tuyệt vời! Dù sao, tôi có thể đặt giá trị nhỏ nhất của thanh tìm kiếm thành 10 không? Tôi có thể đặt giá trị tối đa, bằng cách nói 'seekBar.setMax (200)', không có giá trị nhỏ nhất.Tôi có một số ý tưởng về cách thực hiện điều này, nhưng mỗi lần bị lỗi ( – lomza
Sử dụng seekBar.setProgress (10); để đặt giá trị nhỏ nhất thành 10 trong thanh tìm kiếm – Dharmendra
Tôi đã giải quyết vấn đề này. 10, tôi vẫn có thể thiết lập 0, và tôi muốn không thể tùy chọn này (vì vậy người dùng không thể chọn một giá trị nhỏ hơn 10) .Tôi đã làm điều này nhưng đặt một câu lệnh if if trong ChangeListener – lomza