Кто-нибудь знает, как определить минимальное значение SeekBar? Это делается в XML-макете или мне нужно определить его программно?
В основном мне нужно изменить минимальное значение от 0 до 0.2
Кто-нибудь знает, как определить минимальное значение SeekBar? Это делается в XML-макете или мне нужно определить его программно?
В основном мне нужно изменить минимальное значение от 0 до 0.2
Привет, кто-нибудь знает, как определить Минимальное значение SeekBar?
Вы не можете определить минимальное значение. Это 0
.
В основном мне нужно изменить свой минимум значение от 0 до 0,2
Когда вы получите значение, добавьте 0.2
к нему.
Вот что я использую для получения android:max
для диапазона max/min для 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)
;
В основном я добавил размер + 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();
}
Значение min должно быть 0 для объекта SeekBar в Java (т.е. его нельзя изменить), но это то, как получить требуемый внешний вид и производительность.
Предположим, вы хотите, чтобы ваш min был 5, а ваш максимум был 100...
Следовательно, у вас есть диапазон 95, поэтому вам нужно будет настроить SeekBar с максимальным значением 95
.
Если ваша панель поиска имеет метки пользовательского интерфейса, вы должны сделать их 5
(min) и 100
(max).
Итак, формат 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);
}
}
});
Это решение даст вашему поисковому счету правильный минимальный, макс и масштаб в пользовательском интерфейсе, а положение элемента управления не будет "прыгать" вправо, если пользователь скользит по нему влево.
Мое решение, которое отлично подходит для меня, это:
@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) {
}
});
Вы можете попробовать сделать так:
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) {
}
};
В версиях api >= 26 теперь вы можете добавить атрибут min
xml в SeekBar:
android:min="0.2"
этот код работает для меня отлично!!!
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);
}
});
Надеюсь, что это поможет:)
Как говорят Жоао Магалханес:
теперь вы можете добавить атрибут min xml в SeekBar с помощью:
android:min="0.2"
Но это лучше для API < 26 для использования атрибута compat;):
xmlns:app="http://schemas.android.com/apk/res-auto"
app:min="0.2"