Дискретный поиск в приложении Android?
Я хотел бы создать поисковую панель для Android-приложения, которая позволяет пользователю выбирать значение от -5 до 5 (что соответствует "сильно не согласен" и "сильно согласен" ). Как создать форму поиска с дискретными значениями? или есть лучший виджет пользовательского интерфейса, который я мог бы использовать для этого?
Спасибо.
Ответы
Ответ 1
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>
Ответ 2
Проверить эту ссылку
Если вы хотите реализовать дискретную панель поиска с количеством пробелов без использования сторонней библиотеки, тогда используйте свойство стиля для поиска.
<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" />
![введите описание изображения здесь]()
Ответ 3
Я не знаю, в чем проблема, добавьте поисковую панель, имеющую диапазон 0-10. Затем вы можете сопоставить эти значения с -5, если вы выберете -5 из выбранного значения.
ИЗМЕНИТЬ
добавьте android:max="10"
в xml definiton, и вы получите фиксированный формат поиска.
Возможно, вам стоит подумать о добавлении текстового представления, чтобы обозначить текущее текстовое представление выбранного значения, такое как: Категорически не согласен.
Чтобы обновить это представление, подпишитесь на onProgressChanged
event и progress
параметр даст вам выбранный номер.
SeekBar s = (SeekBar) findViewById(R.id.SeekBar);
s.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar,
int progress, boolean fromUser) {
}
}
Ответ 4
Надеюсь, этот код поможет вам.
Попробуйте это...
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));
}
});
}
Ответ 5
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;
}
}
Ответ 6
<SeekBar
android:id="@+id/seekbar"
style="@style/SeekBarWithoutSteps"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="22dp"
android:layout_marginRight="22dp"
android:layout_marginTop="@dimen/margin_10"
android:max="4"
android:maxHeight="@dimen/margin_5"
android:minHeight="@dimen/margin_5"
android:paddingLeft="@dimen/margin_10"
android:paddingRight="@dimen/margin_10"
android:progressBackgroundTint="@color/colorGray"
android:progressTint="@color/colorGreen"
android:theme="@style/Widget.AppCompat.SeekBar.Discrete"
android:thumb="@drawable/filled_green"
android:thumbOffset="15dp" />