Wie definiere ich den Mindestwert einer SeekBar? Wird dies im XML-Layout durchgeführt oder muss ich es programmgesteuert definieren?
Grundsätzlich muss ich meinen Mindestwert von 0 auf 0,2 ändern
java
android
android-view
seekbar
Sachin
quelle
quelle
setProgress
damit sich die Änderung auf der Benutzeroberfläche widerspiegelt - wie Szabolcs Becze in seiner Antwort demonstriert.SeekBar
repräsentiert den Bereich von 0 bis (max-min). Um den angepassten Wert zu erhalten, addieren Sie das gewünschte Minimum zum tatsächlichen Fortschritt. Da der tatsächliche Fortschritt bereits "auf der Benutzeroberfläche reflektiert" ist, gibt es dort nichts zu ändern.Hier ist, was ich benutze, um
android:max
einen Max / Min-Bereich für a zu erhaltenSeekBar
.mSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { int progressChanged = minimumValue; public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { progressChanged = minimumValue+ progress; } });
So erhalten Sie die Reichweite
minimum to minimum+max
;Um den Maximalwert in xml, Nutzung
max=(desiredMax-min)
;quelle
Der Mindestwert muss 0 für das SeekBar-Objekt in Java sein (dh er kann nicht geändert werden). Auf diese Weise erhalten Sie jedoch das erforderliche Aussehen und die erforderliche Leistung.
Angenommen, Sie möchten, dass Ihr Minimum 5 und Ihr Maximum 100 beträgt ...
Daher haben Sie einen Bereich von 95, sodass Sie die SeekBar mit einem Maximalwert von einrichten müssen
95
.Wenn Ihre Suchleiste UI-Beschriftungen hat, würden Sie diese
5
(min) und100
(max) erstellen .Das Layout-XML wäre also 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 können Sie die Einführung
5
Korrektur, so ...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); } } });
Diese Lösung gibt Ihrer Suchleiste die richtigen Min-, Max- und Skalierungswerte auf der Benutzeroberfläche, und die Position des Steuerelements springt nicht nach rechts, wenn der Benutzer sie ganz nach links schiebt.
quelle
Grundsätzlich habe ich die Größe + 10 hinzugefügt, die automatisch die min auf 10 setzt. Sie können Ihre ändern, um die min einzustellen. 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(); }
quelle
In API-Versionen> = 26 können Sie
min
SeekBar jetzt ein XML-Attribut hinzufügen:android:min="0.2"
quelle
Meine Lösung, die für mich gut funktioniert, ist:
@Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (progress <= SOME_LIMIT) { seekBar.setProgress(SOME_LIMIT); } else { // DO SOMETHING } }
quelle
Sie können den Fortschritt in float nicht festlegen, da seekbar.getProgress () immer einen ganzzahligen Wert zurückgibt. Mit dem folgenden Code wird der Textansichtswert auf 0,2 gesetzt, wenn der Suchleistenwert 0 ist. Sie können den Mindestwert entsprechend Ihren Anforderungen ä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) { } });
quelle
Ich habe diese einfache Bibliothek erstellt, es ist nicht viel, aber es kann Ihnen einige Zeit sparen.
https://github.com/joaocsousa/DoubleSeekBar
quelle
Sie können dies folgendermaßen versuchen:
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) { } };
quelle
Dieser Code funktioniert gut für mich !!!
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) { } };
quelle
Ich habe endlich einen Weg gefunden, den
seekBar
Mindestwert festzulegen . Stellen Sie einfach Ihren WertsetOnSeekBarChangeListener
wie folgt ein: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); } });
Hoffe das hilft :)
quelle
So habe ich das mit Kotlin gemacht:
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() }
quelle
Wenn Sie verwenden
com.android.support:preference-v7
, hatSeekBarPreference
bereits eine MethodesetMin(int)
.Rufen Sie das einfach
onCreatePreferences()
von Ihnen anPreferenceFragmentCompat
.XML-Werte werden in API <26 weiterhin ignoriert, aber das programmgesteuerte Festlegen funktioniert.
quelle