2010-08-16 35 views
31

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?

Trả lời

73

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.

+0

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

+0

xin lỗi dude, waz khi rời đi, dats y didnt respond..i upvoted và aaccepeted d answer ... thưởng thức – iscavengers

+0

@Paresh: Nice logic để đặt Giá trị tối thiểu để tìm kiếm. Tuyệt quá. . . –

22

Đặt giá trị tối đa thành 30 và thêm 20 vào giá trị bạn đã đọc từ SeekBar.

+1

Đâ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

4

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

+1

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

-3

Bạn có thể thử này:

seekBar.setMax(max_value-min_value); 
0

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) {} 
    }); 
0

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ác vấn đề liên quan