Мінімальне значення Android SeekBar


81

Як визначити мінімальне значення SeekBar? Чи робиться це в XML-макеті, чи мені це потрібно визначати програмно?

В основному мені потрібно змінити своє мінімальне значення з 0 на 0,2

Відповіді:


122

Як визначити мінімальне значення SeekBar?

Ви не можете визначити мінімальне значення. Це так 0.

В основному мені потрібно змінити своє мінімальне значення з 0 на 0,2

Отримавши значення, додайте 0.2до нього.


Вам також слід зателефонувати, setProgressщоб зміни відобразились на інтерфейсі користувача - як демонструє Сабольч Бече у своїй відповіді.
заборона геоінженерії

4
@ user1617737: Ні, не слід. Його відповідь не має нічого спільного з мінімальним значенням. SeekBarЯвляє собою діапазон від 0 до (макс-мін). Щоб отримати скориговане значення, ви додаєте бажаний мінімум до фактичного прогресу. Оскільки фактичний прогрес вже "відображається на інтерфейсі користувача", там нічого змінити немає.
CommonsWare

Добре, це залежить від того, як налаштовані ваші етикетки. Я щойно дав повну відповідь, яка, на мою думку, є єдино правильним способом зробити це. stackoverflow.com/questions/3033135/…
заборона геоінженерії

Встановіть мітку MIN з мінімальним значенням, а MAX - з максимальним значенням. В onProgressChanged () встановіть поточне значення Label як progress + minValue.
Рахул Растогі,

22

Ось те, що я використовую для отримання 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);


2
Так, я думаю, що це найкращий підхід. Одиниці виміру SeekBar - це просто абстрактні значення. Ви можете просто скоригувати їх у коді, щоб отримати фактичні одиниці, які ви хочете, тому я підтримав вашу відповідь.
Девід Джордж

9

Мінімальне значення має бути 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);
        }
    }
});

Це рішення надасть вашій панелі пошуку правильний мінімальний, максимальний та масштабний інтерфейс, а положення елемента керування не буде «стрибати» вправо, якщо користувач посуне його до кінця вліво.


9

В основному я додав розмір + 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();

}

В основному я додав розмір + 10, який автоматично встановить мінімум на 10, ви можете змінити свій, щоб встановити, який мінімум. значення.
SALMAN

10
Будь ласка, не використовуйте коментарі для пояснення коду у своїй відповіді, будь ласка, включіть його як частину самої відповіді.
Flexo


5

Моє рішення, яке мені добре підходить:

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

} 

4

Ви не можете встановити прогрес у плаваючій системі, оскільки searchbar.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) {

            }
        });


1

Ви можете спробувати зробити так:

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

        }
    };

0

цей код працює для мене чудово !!!

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

    }
};

0

Нарешті я знайшов спосіб встановити 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);

    }
});

Сподіваюся, це допомагає :)


0

Ось як я це зробив з Котліном:

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()
    }

0

Якщо ви використовуєте com.android.support:preference-v7, SeekBarPreferenceвже має метод setMin(int).

Просто зателефонуйте onCreatePreferences()до свого PreferenceFragmentCompat.

Значення XML все одно ігноруватимуться в API <26, але програмне встановлення працює.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.