Как определить минимальное значение SeekBar? Это сделано в XML-макете или мне нужно определить его программно?
В основном мне нужно изменить минимальное значение с 0 на 0,2.
java
android
android-view
seekbar
Сачин
источник
источник
setProgress
чтобы изменения отразились в пользовательском интерфейсе - как показывает Сабольч Бекце в своем ответе.SeekBar
Представляет собой диапазон от 0 до (макс-мин). Чтобы получить скорректированное значение, вы добавляете желаемый минимум к фактическому прогрессу. Поскольку фактический прогресс уже «отражается в пользовательском интерфейсе», менять там нечего.Вот что я использую, чтобы получить
android:max
максимальный / минимальный диапазон дляSeekBar
.mSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { int progressChanged = minimumValue; public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { progressChanged = minimumValue+ progress; } });
Так вы получите диапазон
minimum to minimum+max
;Чтобы установить максимальное значение в xml, используйте
max=(desiredMax-min)
;источник
Минимальное значение должно быть 0 для объекта SeekBar в Java (т. Е. Его нельзя изменить), но так можно получить требуемый внешний вид и производительность.
Предположим, вы хотите, чтобы ваше минимальное значение было 5, а максимальное - 100 ...
Следовательно, у вас есть диапазон 95, поэтому вам нужно настроить SeekBar с максимальным значением
95
.Если на вашей панели поиска есть метки пользовательского интерфейса, вы должны сделать их
5
(мин.) И100
(макс.).Итак, XML-макет будет примерно таким ...
<LinearLayout android:id="@+id/sampleSizeLayout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/batchDurationSecsLayout" android:orientation="vertical" android:visibility="visible" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/sample_size" /> <SeekBar android:id="@+id/sampleSizeSeekBar" android:layout_width="fill_parent" android:layout_height="wrap_content" android:max="95" /> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:visibility="visible" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:gravity="left" android:text="5" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:gravity="right" android:text="100" /> </RelativeLayout> </LinearLayout>
Итак, теперь вы можете внести
5
исправление, вот так ...final SeekBar sampleSizeSeekBar = (SeekBar)findViewById(R.id.sampleSizeSeekBar); final int sampleSizeSeekBarCorrection = 5; //e.g., 95 <--> 100 int realValueFromPersistentStorage = appObj.getSampleSize(); //Get initial value from persistent storage, e.g., 100 sampleSizeSeekBar.setProgress(realValueFromPersistentStorage - sampleSizeSeekBarCorrection); //E.g., to convert real value of 100 to SeekBar value of 95. sampleSizeSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { int val = sampleSizeSeekBar.getProgress(); public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { val = progress + sampleSizeSeekBarCorrection; //e.g., to convert SeekBar value of 95 to real value of 100 } public void onStartTrackingTouch(SeekBar seekBar) { } public void onStopTrackingTouch(SeekBar seekBar) { try { appObj.saveSampleSize(val); //Save real value to persistent storage, e.g., 100 appObj.makeToast("Sample size set to " + val); } catch(Exception e) { Log.e(LOG_TAG, "Error saving sample size", e); appObj.makeToast("Error saving sample size: " + e); } } });
Это решение предоставит вашей панели поиска правильные минимальное, максимальное значение и масштаб в пользовательском интерфейсе, а положение элемента управления не будет «прыгать» вправо, если пользователь сдвинет его полностью влево.
источник
В основном я добавил размер + 10, который автоматически установит минимум 10, вы можете изменить свой, чтобы установить, какой минимум. значение.
@Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { int siz = size + 10; txtViewFontSize.setTextSize(siz); Toast.makeText(this, String.valueOf(siz), Toast.LENGTH_SHORT).show(); }
источник
В версиях api> = 26 вы теперь можете добавить
min
атрибут xml в SeekBar:android:min="0.2"
источник
Мое решение, которое отлично работает для меня:
@Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (progress <= SOME_LIMIT) { seekBar.setProgress(SOME_LIMIT); } else { // DO SOMETHING } }
источник
Вы не можете установить прогресс в float, потому что seekbar.getProgress () всегда возвращает целочисленное значение. Следующий код установит значение textview равным 0,2, если значение панели поиска равно 0. вы можете изменить minimumVal в соответствии с вашими требованиями.
int minimumVal = 0; seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (progress >= minimumVal) { seekBar.setProgress(progress); textView.setText(progress); } else { seekBar.setProgress(minimumVal); textView.setText("0.2"); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } });
источник
Я создал эту простую библиотеку, ее немного, но она может сэкономить вам время.
https://github.com/joaocsousa/DoubleSeekBar
источник
Вы можете попробовать сделать так:
int yourMinProgress = 10;
private SeekBar.OnSeekBarChangeListener onSeekBarChangeListener = new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean b) { if (progress < yourMinProgress) { seekBar.setProgress(10); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } };
источник
этот код у меня отлично работает !!!
SeekBar seekBar = (SeekBar)findViewById(R.id.seekBar); seekBar.setMax(100); seekBar.setProgress(40); seekBar.setOnSeekBarChangeListener(seekBarChangeListener); SeekBar.OnSeekBarChangeListener seekBarChangeListener = new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean b) { if(progress <= 40){ seekBar.setProgress(40); } if(progress >= 40) { pgr_status.setText(String.valueOf(progress)); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } };
источник
Наконец-то я нашел способ установить
seekBar
минимальное значение , просто установите егоsetOnSeekBarChangeListener
так:int minimumValue = 10; // your minimum value seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // you can set progress value on TextView as usual txtProgress.setText(String.valueOf(progress)); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { if(seekBar.getProgress() < minimumValue) seekBar.setProgress(minimumValue); } });
Надеюсь это поможет :)
источник
Вот как я сделал это с Kotlin:
view.controlTextSize.setOnClickListener { textSizeControl.textSizeControlSlider.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener{ override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { var progress = progress if (progress < 10){ progress = 10 seekBar?.progress = progress } view.content.textSize = progress.toFloat() prefs.edit().putFloat("ContentTextSize", progress.toFloat()).apply() } override fun onStartTrackingTouch(seekBar: SeekBar?) {} override fun onStopTrackingTouch(seekBar: SeekBar?) {} }) textSizeControl.show() }
источник
Если вы используете
com.android.support:preference-v7
,SeekBarPreference
уже есть методsetMin(int)
.Просто позвоните в
onCreatePreferences()
свойPreferenceFragmentCompat
.Значения XML по-прежнему будут игнорироваться в API <26, но программная установка работает.
источник