Làm thế nào để xác định giá trị tối thiểu của SeekBar? Điều này được thực hiện trong bố cục XML hay tôi cần xác định nó theo chương trình?
Về cơ bản, tôi cần thay đổi giá trị tối thiểu của mình từ 0 thành 0,2
Câu trả lời:
Làm thế nào để xác định giá trị tối thiểu của SeekBar?
Bạn không thể xác định giá trị tối thiểu. Đó là 0
.
Về cơ bản, tôi cần thay đổi giá trị tối thiểu của mình từ 0 thành 0,2
Khi bạn nhận được giá trị, hãy thêm 0.2
vào nó.
SeekBar
đại diện cho khoảng từ 0 đến (max-min). Để nhận được giá trị đã điều chỉnh, bạn thêm số tiền tối thiểu mong muốn vào tiến độ thực tế. Vì tiến trình thực tế đã được "phản ánh trên giao diện người dùng", nên không có gì thay đổi ở đó.
Đây là những gì tôi sử dụng để lấy android:max
phạm vi tối đa / tối thiểu cho a SeekBar
.
mSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
int progressChanged = minimumValue;
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
progressChanged = minimumValue+ progress;
}
});
Vì vậy, bạn sẽ nhận được phạm vi minimum to minimum+max
;
Để đặt giá trị tối đa trong xml, hãy sử dụng max=(desiredMax-min)
;
Giá trị min phải là 0 cho đối tượng SeekBar trong Java (nghĩa là không thể thay đổi nó), nhưng đây là cách để có được giao diện và hiệu suất cần thiết.
Giả sử bạn muốn giá trị tối thiểu là 5 và giá trị tối đa của bạn là 100
Do đó, bạn có phạm vi là 95, vì vậy bạn sẽ cần thiết lập SeekBar với giá trị tối đa là 95
.
Nếu thanh tìm kiếm của bạn có các nhãn giao diện người dùng, bạn sẽ đặt chúng 5
(tối thiểu) và 100
(tối đa).
Vì vậy, bố cục XML sẽ giống như ...
<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>
Vì vậy, bây giờ bạn có thể giới thiệu sự 5
điều chỉnh, như thế này ...
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);
}
}
});
Giải pháp này sẽ cung cấp cho thanh tìm kiếm của bạn giá trị tối thiểu, tối đa và tỷ lệ chính xác trên giao diện người dùng và vị trí của điều khiển sẽ không 'nhảy' sang phải nếu người dùng trượt hết sang trái.
Về cơ bản, tôi đã thêm kích thước + 10 sẽ tự động đặt tối thiểu thành 10, bạn có thể thay đổi kích thước của mình để đặt nó tối thiểu. giá trị.
@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();
}
Trong các phiên bản api> = 26, bây giờ bạn có thể thêm min
thuộc tính xml vào SeekBar:
android:min="0.2"
Giải pháp của tôi phù hợp với tôi là:
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (progress <= SOME_LIMIT) {
seekBar.setProgress(SOME_LIMIT);
} else {
// DO SOMETHING
}
}
Bạn không thể đặt tiến trình trong float vì seekbar.getProgress () luôn trả về giá trị số nguyên. Mã sau sẽ đặt giá trị textview thành 0.2 nếu giá trị của seekbar là 0. bạn có thể thay đổi MinimumVal theo yêu cầu của mình.
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) {
}
});
Tôi đã tạo ra một thư viện đơn giản này, nó không nhiều nhưng nó có thể giúp bạn tiết kiệm thời gian.
Bạn có thể thử làm theo cách này:
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) {
}
};
mã này làm việc cho tôi tốt !!!
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) {
}
};
Cuối cùng tôi đã tìm ra cách để đặt seekBar
giá trị tối thiểu , chỉ cần đặt setOnSeekBarChangeListener
như sau:
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);
}
});
Hi vọng điêu nay co ich :)
Đây là cách tôi đã làm điều này với 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()
}
setProgress
để thay đổi được phản ánh trên giao diện người dùng - như Szabolcs Becze đã thể hiện trong câu trả lời của mình.