Valeur minimale de Android SeekBar

Est-ce que quelqu’un sait comment définir la valeur minimale d’un SeekBar? Est-ce fait dans la mise en page XML ou dois-je le définir par programmation?

Fondamentalement, je dois changer ma valeur minimale de 0 à 0,2

Bonjour, est-ce que quelqu’un sait comment définir la valeur minimale de SeekBar?

Vous ne pouvez pas définir la valeur minimale. C’est 0 .

Fondamentalement, je dois changer ma valeur minimale de 0 à 0,2

Lorsque vous obtenez la valeur, ajoutez-y 0.2 .

Voici ce que j’utilise pour obtenir android:max pour une plage max / min pour un SeekBar .

 mSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { int progressChanged = minimumValue; public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { progressChanged = minimumValue+ progress; } }); 

Ainsi, vous obtiendrez la plage minimum to minimum+max ;

Pour définir la valeur max dans xml, utilisez max=(desiredMax-min) ;

Fondamentalement, j’ai ajouté la taille + 10 qui réglera automatiquement le min à 10, vous pouvez changer le vôtre pour le définir min. valeur.

 @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { int siz = size + 10; txtViewFontSize.setTextSize(siz); Toast.makeText(this, Ssortingng.valueOf(siz), Toast.LENGTH_SHORT).show(); } 

La valeur min doit être 0 pour l’object SeekBar en Java (c.-à-d. Qu’il ne peut pas être modifié), mais c’est la façon d’obtenir l’apparence et les performances requirejses.

Supposons que vous vouliez que votre min soit 5 et que votre max soit 100 …

Par conséquent, vous avez une plage de 95, vous devez donc configurer le SeekBar avec une valeur maximale de 95 .

Si votre barre de recherche a des étiquettes d’interface utilisateur, vous les feriez 5 (min) et 100 (max).

Donc, le format XML serait quelque chose comme …

         

Alors maintenant, vous pouvez introduire la correction 5 , comme ça …

 final SeekBar sampleSizeSeekBar = (SeekBar)findViewById(R.id.sampleSizeSeekBar); final int sampleSizeSeekBarCorrection = 5; //eg, 95 < --> 100 int realValueFromPersistentStorage = appObj.getSampleSize(); //Get initial value from persistent storage, eg, 100 sampleSizeSeekBar.setProgress(realValueFromPersistentStorage - sampleSizeSeekBarCorrection); //Eg, 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; //eg, 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, eg, 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); } } }); 

Cette solution donnera à votre barre de recherche le min, le max et l’échelle corrects sur l’interface utilisateur, et la position du contrôle ne “sautera” pas à droite si l’utilisateur le fait glisser complètement vers la gauche.

Ma solution qui fonctionne bien pour moi est:

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

Vous ne pouvez pas définir la progression dans float car seekbar.getProgress () retourne toujours une valeur entière. Le code suivant définit la valeur textview à 0,2 si la valeur de la barre de recherche est 0. Vous pouvez modifier minimumVal en fonction de vos besoins.

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

Dans les versions d’API> = 26, vous pouvez maintenant append l’atsortingbut min xml à SeekBar:

android:min="0.2"

J’ai créé cette bibliothèque simple, ce n’est pas beaucoup, mais cela peut vous faire gagner du temps.

https://github.com/joaocsousa/DoubleSeekBar

Vous pouvez essayer de faire comme suit:

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

ce code fonctionne pour moi bien !!!

 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(Ssortingng.valueOf(progress)); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }; 

J’ai finalement trouvé un moyen de définir la valeur minimale de seekBar , il suffit de définir set comme 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(Ssortingng.valueOf(progress)); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { if(seekBar.getProgress() < minimumValue) seekBar.setProgress(minimumValue); } }); 

J'espère que cela t'aides 🙂

Comme le dit João Magalhães:

vous pouvez maintenant append l’atsortingbut min xml à SeekBar avec:

 android:min="0.2" 

Mais il est préférable que l’API <26 utilise l’attribut compat;):

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

Voici comment je l’ai fait avec 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() } 

Si vous utilisez com.android.support:preference-v7 , SeekBarPreference déjà une méthode setMin(int) .

Appelez simplement cela dans onCreatePreferences() de votre PreferenceFragmentCompat .

Les valeurs XML seront toujours ignorées sur l’API <26, mais le paramètrera par programmation, cela fonctionne.