SeekBar'ın minimum değeri nasıl tanımlanır? Bu XML düzeninde mi yapılır yoksa bunu programlı olarak tanımlamam gerekir mi?
Temel olarak minimum değerimi 0'dan 0,2'ye değiştirmem gerekiyor
Yanıtlar:
SeekBar'ın minimum değeri nasıl tanımlanır?
Minimum değeri tanımlayamazsınız. Öyle 0
.
Temel olarak minimum değerimi 0'dan 0,2'ye değiştirmem gerekiyor
Değeri elde 0.2
ettiğinizde ona ekleyin .
SeekBar
0 (mak-min) aralığı temsil etmektedir. Ayarlanan değeri elde etmek için, istediğiniz minimum değeri gerçek ilerlemeye eklersiniz. Gerçek ilerleme zaten "kullanıcı arayüzüne yansıtıldığından", burada değiştirilecek hiçbir şey yoktur.
Burada android:max
bir maks / min aralığı elde etmek için kullandığım şey SeekBar
.
mSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
int progressChanged = minimumValue;
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
progressChanged = minimumValue+ progress;
}
});
Böylece aralığı alacaksınız minimum to minimum+max
;
Xml'de maksimum değeri ayarlamak için max=(desiredMax-min)
;
Java'daki SeekBar nesnesi için minimum değer 0 olmalıdır (yani değiştirilemez), ancak gerekli görünüm ve performans bu şekilde elde edilir.
Diyelim ki minimum değeriniz 5 ve maksimum değeriniz 100 olsun ...
Bu nedenle, 95'lik bir aralığınız var, bu nedenle SeekBar'ı maksimum değer ile ayarlamanız gerekir 95
.
Arama çubuğunuzda UI etiketleri varsa, bunları 5
(min) ve 100
(maks) yaparsınız .
Öyleyse, XML düzeni şöyle bir şey olurdu ...
<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>
Yani şimdi sen tanıtabilirsiniz 5
böyle, düzeltme ...
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);
}
}
});
Bu çözüm, arama çubuğunuza kullanıcı arabiriminde doğru min, maks ve ölçeği verecektir ve kullanıcı bunu tamamen sola kaydırırsa, kontrolün konumu sağa 'atlamaz'.
Temel olarak, minimumu otomatik olarak 10'a ayarlayacak olan + 10 boyutunu ekledim, hangi min. değer.
@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();
}
Gelen > = 26 API sürümleri artık ekleyebilir min
seekbar için xml niteliğini:
android:min="0.2"
Benim için iyi çalışan çözümüm:
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (progress <= SOME_LIMIT) {
seekBar.setProgress(SOME_LIMIT);
} else {
// DO SOMETHING
}
}
Float'ta ilerleme ayarlayamazsınız çünkü seekbar.getProgress () her zaman tamsayı değeri döndürür. Aşağıdaki kod, arama çubuğu değeri 0 ise metin görünümü değerini 0.2 olarak ayarlayacaktır. MinimumVal'i ihtiyacınıza göre değiştirebilirsiniz.
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) {
}
});
Bu basit kitaplığı ben oluşturdum, çok değil ama size biraz zaman kazandırabilir.
Şu şekilde yapmayı deneyebilirsiniz:
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) {
}
};
bu kod benim için iyi çalışıyor !!!
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) {
}
};
Sonunda seekBar
minimum değeri ayarlamanın bir yolunu buldum , sadece şu şekilde ayarlayın setOnSeekBarChangeListener
:
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);
}
});
Bu yardımcı olur umarım :)
Bunu Kotlin ile şu şekilde yaptım:
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()
}
Eğer kullanıyorsanız com.android.support:preference-v7
, SeekBarPreference
zaten bir metodu var setMin(int)
.
Sadece bu resimleri onCreatePreferences()
, aramalarınızdan PreferenceFragmentCompat
.
XML değerleri API <26'da yine de yok sayılacaktır, ancak programatik olarak ayarlandığında çalışır.
setProgress
Szabolcs Becze'nin cevabında gösterdiği gibi, değişikliğin kullanıcı arayüzüne yansıması için siz de aramalısınız .