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
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.
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)
;
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();
}
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.
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 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) {
}
});
Dans versions api> = 26 vous pouvez maintenant ajouter l'attribut 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.
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) {
}
};
J'ai finalement trouvé un moyen de définir seekBar
valeur 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 :)
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.
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"
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) {
}
};
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()
}