Qualcuno sa come definire un valore minimo di SeekBar? È fatto nel layout XML o devo definirlo in modo programmatico?Valore minimo Android SeekBar
Fondamentalmente ho bisogno di cambiare il mio valore minima dal 0 al 0,2
Qualcuno sa come definire un valore minimo di SeekBar? È fatto nel layout XML o devo definirlo in modo programmatico?Valore minimo Android SeekBar
Fondamentalmente ho bisogno di cambiare il mio valore minima dal 0 al 0,2
Ciao, qualcuno sa come definire un valore minimo di SeekBar?
Non è possibile definire il valore minimo. È 0
.
Fondamentalmente ho bisogno di cambiare il mio valore minimo da 0 a 0,2
Quando si ottiene il valore, aggiungere 0.2
ad esso.
Fondamentalmente ho aggiunto la dimensione + 10 che imposterà automaticamente il minimo a 10 è possibile modificare il proprio per impostarlo quale min. valore.
Fondamentalmente ho aggiunto la dimensione + 10 che imposterà automaticamente il minimo a 10, puoi cambiare il tuo per impostarlo quale min. valore. – SALMAN
Non utilizzare i commenti per spiegare il codice nella risposta, includerlo come parte della risposta stessa. – Flexo
Non c'è un setMin. Mi piacerebbe impostare il minimo su -2 ... – powder366
Ho creato questa libreria semplice, non è molto, ma può farti risparmiare tempo.
La mia soluzione che funziona bene per me è:
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (progress <= SOME_LIMIT) {
seekBar.setProgress(SOME_LIMIT);
} else {
// DO SOMETHING
}
}
Ecco quello che uso per ottenere android:max
per una gamma max/min per un SeekBar
.
mSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
int progressChanged = minimumValue;
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
progressChanged = minimumValue+ progress;
}
});
Quindi otterrete l'intervallo minimum to minimum+max
;
Per impostare il valore massimo in xml, utilizzare max=(desiredMax-min)
;
Sì, penso che questo sia l'approccio migliore. Le unità di SeekBar sono solo valori astratti. Puoi semplicemente regolarli in codice per ottenere le unità reali che desideri, quindi ho aumentato la tua risposta. –
Il valore minimo deve essere 0 per l'oggetto SeekBar in Java (vale a dire, non può essere modificato), ma questo è come ottenere l'aspetto e le prestazioni richiesti.
Supponiamo che si desidera che il minimo per essere 5 e la vostra massima per il 100 ...
Pertanto, si dispone di una serie di 95, quindi si avrebbe bisogno di impostare il SeekBar con un valore massimo di 95
.
Se la barra di ricerca ha le etichette dell'interfaccia utente, le renderei 5
(min) e 100
(max).
Così, l'XML di layout sarebbe qualcosa di simile ...
<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>
Così ora è possibile introdurre la correzione 5
, come questo ...
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);
}
}
});
Questa soluzione darà la barra di ricerca indica il minimo, il massimo e la scala corretti sull'interfaccia utente e la posizione del controllo non "salta" a destra se l'utente lo fa scorrere completamente verso sinistra.
Bella spiegazione .. –
Non è possibile impostare lo stato di avanzamento in float perché seekbar.getProgress() restituisce sempre un valore intero. Il codice seguente imposta il valore della vista testo su 0,2 se il valore della barra di ricerca è 0. è possibile modificare il valore minimo in base alle proprie esigenze.
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) {
}
});
si può provare a fare in questo modo:
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) {
}
};
questo codice funziona per me bene !!!
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) {
}
};
In versioni API> = 26 è ora possibile aggiungere min
attributo XML per SeekBar:
android:min="0.2"
ho finalmente trovato un modo per impostare seekBar
valore minimo, insieme appena impostato il tuo setOnSeekBarChangeListener
in questo modo:
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);
}
});
Spero che questo aiuti :)
Come dicono João Magalhães:
ora è possibile aggiungere l'attributo min xml SeekBar con:
android:min="0.2"
Ma è meglio per l'API < 26 di utilizzare l'attributo compat;):
xmlns:app="http://schemas.android.com/apk/res-auto"
app:min="0.2"
non esiste tale attributo "app: min". Compile dice no ^^ – GuilhE
Ecco come ho fatto con 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 dovrebbe chiamare anche 'setProgress' in modo che il cambiamento si rifletta sull'interfaccia utente - come dimostra Szabolcs Becze nella sua risposta. –
@ user1617737: No, non dovresti. La sua risposta non ha nulla a che fare con il valore minimo. 'SeekBar' rappresenta l'intervallo da 0 a (max-min). Per ottenere il valore corretto, aggiungi il minimo desiderato al progresso effettivo. Dal momento che i progressi effettivi sono già "riflessi sull'interfaccia utente", non c'è nulla da cambiare lì. – CommonsWare
OK, beh, dipende da come sono impostate le etichette. Ho appena fornito una risposta completa che ritengo sia l'unico modo corretto per farlo. http://stackoverflow.com/questions/3033135/android-seekbar-minimum-value/25239248#25239248 –