2010-06-13 10 views
67

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

Antwort

102

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.

+0

Sie sollten 'setProgress' auch aufrufen, damit sich die Änderung auf der Benutzeroberfläche widerspiegelt - wie Szabolcs Becze in seiner Antwort zeigt. –

+4

@ 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

+0

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 –

8

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

} 
+0

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

+10

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

+0

Es gibt keinen setMin. Ich möchte das Minimum auf -2 ... setzen – powder366

3

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 
    } 

} 
12

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

+1

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

5

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.

+0

Schöne Erklärung .. –

2

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

      } 
     }); 
1

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

     } 
    }; 
0

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

    } 
}; 
1

In api Versionen> = 26 können Sie jetzt min xml-Attribut SeekBar hinzu:

android:min="0.2"

0

I seekBarMindestwert 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 :)

0

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" 
+0

gibt es kein solches Attribut "app: min". Kompilieren sagt nein ^^ – GuilhE

0

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