Kann jemand den Mindestwert einer SeekBar definieren? Ist dies im XML-Layout geschehen oder muss ich es programmatisch definieren?Android SeekBar Mindestwert
Grundsätzlich muss ich mein Minimum Wert von 0 bis 0,2
Kann jemand den Mindestwert einer SeekBar definieren? Ist dies im XML-Layout geschehen oder muss ich es programmatisch definieren?Android SeekBar Mindestwert
Grundsätzlich muss ich mein Minimum Wert von 0 bis 0,2
Hallo ändern, weiß jemand, wie ein SeekBar den Minimalwert definieren?
Sie können den Mindestwert nicht definieren. Es ist 0
.
Grundsätzlich muß ich meinen Mindest Wert von 0 bis 0,2
ändern Wenn Sie den Wert zu erhalten, fügen 0.2
zu.
Grundsätzlich habe ich die Größe + 10 hinzugefügt, die automatisch die min auf 10 setzt, die Sie ändern können, um es einzustellen, welche min. Wert.
@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();
}
Grundsätzlich habe ich die Größe + 10 hinzugefügt, die automatisch die min auf 10 setzt, die du ändern kannst, um sie zu setzen, welche min. Wert . – SALMAN
Bitte verwenden Sie keine Kommentare, um den Code in Ihrer Antwort zu erklären, bitte fügen Sie ihn als Teil der Antwort selbst hinzu. – Flexo
Es gibt keinen setMin. Ich möchte das Minimum auf -2 ... setzen – powder366
Ich habe diese einfache Bibliothek, es ist nicht viel, aber es kann Ihnen etwas Zeit sparen.
Meine Lösung, die gut für mich funktioniert, ist:
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (progress <= SOME_LIMIT) {
seekBar.setProgress(SOME_LIMIT);
} else {
// DO SOMETHING
}
}
Hier ist, was ich android:max
für max/min Bereich für einen SeekBar
zu bekommen verwenden.
mSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
int progressChanged = minimumValue;
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
progressChanged = minimumValue+ progress;
}
});
So erhalten Sie den Bereich minimum to minimum+max
;
Um den maximalen Wert in XML festzulegen, verwenden Sie max=(desiredMax-min)
;
Ja, ich denke, das ist der beste Ansatz. A SeekBars Einheiten sind nur abstrakte Werte. Sie können sie einfach im Code anpassen, um die gewünschten Einheiten zu erhalten. Daher habe ich Ihre Antwort aktualisiert. –
Der min-Wert muss für das SeekBar-Objekt in Java 0 sein (d. H., Es kann nicht geändert werden), aber so erhalten Sie das erforderliche Aussehen und die erforderliche Leistung.
Angenommen, Sie möchten Ihre min 5 und Ihre max sein Deshalb werden 100 ...
, Ihnen eine Reihe von 95 haben, so würden Sie den SeekBar mit einem Maximalwert von 95
einrichten müssen.
Wenn Ihre Suchleiste UI-Etiketten hat, würden Sie sie 5
(min) und 100
(max) machen.
So würde das Layout XML so etwas wie ...
<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>
So jetzt Sie die 5
Korrektur vorstellen können, wie diese ...
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);
}
}
});
wird diese Lösung geben Auf der Benutzeroberfläche wird die korrekte Min-, Max- und Skalierung angezeigt. Die Position des Steuerelements springt nicht nach rechts, wenn der Benutzer es ganz nach links verschiebt.
Schöne Erklärung .. –
Sie können den Fortschritt in float nicht festlegen, da seekbar.getProgress() immer einen Ganzzahlwert zurückgibt. Der folgende Code setzt den Textview-Wert auf 0,2, wenn der Suchleistenwert 0 ist. Sie können MinimumVal entsprechend Ihrer Anforderung ändern.
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) {
}
});
Sie können auf diese Weise versuchen zu tun:
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) {
}
};
dieser Code funktioniert für mich gut !!!
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 api Versionen> = 26 können Sie jetzt min
xml-Attribut SeekBar hinzu:
android:min="0.2"
I seekBar
Mindestwert einzustellen endlich einen Weg gefunden, gerade gesetzt Set Ihr setOnSeekBarChangeListener
wie folgt:
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);
}
});
this helps :)
Wie sagen João Magalhães:
Sie jetzt min xml-Attribut hinzufügen können mit bis SeekBar:
android:min="0.2"
Aber es ist besser für API < 26 zu verwenden compat Attribut;):
xmlns:app="http://schemas.android.com/apk/res-auto"
app:min="0.2"
gibt es kein solches Attribut "app: min". Kompilieren sagt nein ^^ – GuilhE
Hier ist, wie ich mit Kotlin tat dies:
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()
}
Sie sollten 'setProgress' auch aufrufen, damit sich die Änderung auf der Benutzeroberfläche widerspiegelt - wie Szabolcs Becze in seiner Antwort zeigt. –
@ user1617737: Nein, sollten Sie nicht. Seine Antwort hat nichts mit dem Mindestwert zu tun. Die 'SeekBar' repräsentiert den Bereich von 0 bis (max-min). Um den angepassten Wert zu erhalten, fügen Sie das gewünschte Minimum zum tatsächlichen Fortschritt hinzu. Da sich der tatsächliche Fortschritt bereits "auf der Benutzeroberfläche widerspiegelt", gibt es dort nichts zu ändern. – CommonsWare
OK, gut, das hängt davon ab, wie Ihre Etiketten eingerichtet sind. Ich habe nur eine vollständige Antwort gegeben, die meiner Meinung nach der einzig richtige Weg ist. http://stackoverflow.com/questions/3033135/android-seekbar-minimum-value/25239248#25239248 –