web-dev-qa-db-fra.com

Android Valeur minimale SeekBar

Quelqu'un sait-il comment définir la valeur minimale d'un SeekBar? Cela se fait-il dans la disposition XML ou dois-je le définir par programme?

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

76
Sachin

Bonjour, quelqu'un sait-il comment définir la valeur minimale d'un 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 0.2 à elle.

116
CommonsWare

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

Vous obtiendrez donc la plage minimum to minimum+max;

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

21
Asthme

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

@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();

}
9
SALMAN

La valeur min doit être 0 pour l'objet SeekBar dans Java (c'est-à-dire, il ne peut pas être modifié), mais voici comment obtenir l'apparence et les performances requises.

Supposons que vous vouliez que votre min soit de 5 et votre max de 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 possède des libellés d'interface utilisateur, vous devez les créer 5 (min) et 100 (max).

Ainsi, la mise en page XML serait quelque chose comme ...

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

Alors maintenant vous pouvez introduire le 5 correction, comme ça ...

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

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

9
ban-geoengineering

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
    }

} 
5
Szabolcs Becze

Vous ne pouvez pas définir la progression dans float parce que seekbar.getProgress () renvoie toujours une valeur entière. Le code suivant définira la valeur textview à 0,2 si la valeur de la barre de recherche est 0. vous pouvez changer minimumVal selon 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) {

            }
        });
3
Dharmesh

Dans versions api> = 26 vous pouvez maintenant ajouter l'attribut min xml à SeekBar:

Android:min="0.2"

3
João Magalhães

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

2
Joao Sousa

Vous pouvez essayer de faire de cette façon:

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

        }
    };
1
Sasha

J'ai finalement trouvé un moyen de définir seekBarvaleur minimale, il suffit de définir définir votre setOnSeekBarChangeListener comme ceci:

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

    }
});

J'espère que cela t'aides :)

0
Behzad Bahmanyar

Si vous utilisez com.Android.support:preference-v7, SeekBarPreference possède 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 la définition par programme fonctionne.

0
arnab321

Comme le dit João Magalhães:

vous pouvez maintenant ajouter un attribut xml min à SeekBar avec:

Android:min="0.2"

Mais il vaut mieux que l'API <26 utilise l'attribut compat;):

xmlns:app="http://schemas.Android.com/apk/res-auto"
app:min="0.2"
0
J-Jamet

ce code fonctionne bien pour moi !!!

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
Karthick

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