Android SeekBar Минимальная стоимость

Кто-нибудь знает, как определить минимальное значение SeekBar? Это делается в XML-макете или мне нужно определить его программно?

В основном мне нужно изменить минимальное значение от 0 до 0.2

Ответ 1

Привет, кто-нибудь знает, как определить Минимальное значение SeekBar?

Вы не можете определить минимальное значение. Это 0.

В основном мне нужно изменить свой минимум значение от 0 до 0,2

Когда вы получите значение, добавьте 0.2 к нему.

Ответ 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);

Ответ 3

В основном я добавил размер + 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();

}

Ответ 4

Значение 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);
        }
    }
});

Это решение даст вашему поисковому счету правильный минимальный, макс и масштаб в пользовательском интерфейсе, а положение элемента управления не будет "прыгать" вправо, если пользователь скользит по нему влево.

Ответ 5

Мое решение, которое отлично подходит для меня, это:

    @Override 
 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    if (progress <= SOME_LIMIT) {
        seekBar.setProgress(SOME_LIMIT);
    } else {
       // DO SOMETHING
    }

} 

Ответ 6

Я создал эту простую библиотеку, это немного, но это может сэкономить вам некоторое время.

https://github.com/joaocsousa/DoubleSeekBar

Ответ 7

Вы не можете установить прогресс в 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) {

            }
        });

Ответ 8

Вы можете попробовать сделать так:

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) {

        }
    };

Ответ 9

В версиях api >= 26 теперь вы можете добавить атрибут min xml в SeekBar:

android:min="0.2"

Ответ 10

этот код работает для меня отлично!!!

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) {

    }
};

Ответ 11

Наконец-то я нашел способ установить 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);

    }
});

Надеюсь, что это поможет:)

Ответ 12

Как говорят Жоао Магалханес:

теперь вы можете добавить атрибут min xml в SeekBar с помощью:

android:min="0.2"

Но это лучше для API < 26 для использования атрибута compat;):

xmlns:app="http://schemas.android.com/apk/res-auto"
app:min="0.2"