Дискретный поиск в Android-приложении?

Я хотел бы создать поисковую панель для Android-приложения, которая позволяет пользователю выбирать значение от -5 до 5 (что соответствует «сильно не согласен» и «сильно согласен»). Как создать форму поиска с дискретными значениями? Или есть лучший виджет пользовательского интерфейса, который я мог бы использовать для этого?

Благодарю.

Seekbar отлично работает для дискретных значений. Мы используем Seekbar для дискретных данных, как показано ниже. Чтобы показать, какой элемент выбран, мы просто изменяем шрифт выбранного текстового вида, чтобы он был больше. Вы также можете выделить, изменив цвет фона или что-то в этом роде. Это работает очень хорошо. Вы хотите вызвать setMax (11) в строке поиска, а затем в вашем коде вам необходимо соответствующим образом перевести между диапазоном (от 0 до 11) и (от -5 до 5).

<LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal"> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal"> <TextView android:text="-5" android:id="@+id/answerNegative5" android:textSize="25sp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:text="-4" android:id="@+id/answerNegative4" android:textSize="25sp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:text="-3" android:id="@+id/answerNegative3" android:textSize="25sp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> ..... </LinearLayout> <SeekBar android:id="@+id/intensitySlider" android:layout_weight="0" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> 

Я не знаю, в чем проблема, добавьте поисковую панель с диапазоном 0-10. Затем вы можете сопоставить эти значения с -5, если вы выберете -5 из выбранного значения.

РЕДАКТИРОВАТЬ

Добавьте android:max="10" в определение xml, и вы получите фиксированный размер.

Возможно, вам стоит подумать о том, чтобы добавить текстовое представление для обозначения текстового представления текущего выбранного значения, такого как: Полностью не согласен. Чтобы обновить это представление, подпишитесь на onProgressChanged событие и параметр progress даст вам выбранный номер.

 SeekBar s = (SeekBar) findViewById(R.id.SeekBar); s.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { } } 

Проверьте эту ссылку. Если вы хотите внедрить дискретную панель поиска с количеством пробелов без использования сторонней библиотеки, используйте свойство стиля для поиска.

 <SeekBar android:id="@+id/sb" android:layout_width="match_parent" android:layout_height="wrap_content" android:max="10" android:thumb="@drawable/ic_location" android:theme="@style/Widget.AppCompat.SeekBar.Discrete" /> 

Введите описание изображения здесь

Проверьте эту тему .

Я использую его в своем приложении.

1-й шаг: установите maxVal на 10;

2-й шаг:

 @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { switch(seekBar.getId()) { case R.id.mySeekBar: int prValue = progress - 5; editText.setText(String.valueOf(preValue)); break; } } 

Надеюсь, этот код наверняка поможет вам. Попробуй это…

  float discrete = 0; float start = 0; float end = 100; float start_pos = 0; int start_position = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); start = -10; //you need to give starting value of SeekBar end = 10; //you need to give end value of SeekBar start_pos = 5; //you need to give starting position value of SeekBar start_position = (int)(((start_pos - start) / (end - start)) * 100); discrete = start_pos; SeekBar seek = (SeekBar) findViewById(R.id.seekBar1); seek.setProgress(start_position); seek.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override public void onStopTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub Toast.makeText(getBaseContext(), "discrete = " + String.valueOf(discrete), Toast.LENGTH_SHORT).show(); } @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // TODO Auto-generated method stub // To convert it as discrete value float temp = progress; float dis = end - start; discrete = (start + ((temp / 100) * dis)); } }); }