सीकबेर के न्यूनतम मूल्य को कैसे परिभाषित किया जाए? क्या यह XML लेआउट में किया गया है या क्या मुझे इसे प्रोग्रामेटिक रूप से परिभाषित करने की आवश्यकता है?
मूल रूप से मुझे अपना न्यूनतम मान 0 से 0.2 तक बदलना होगा
जवाबों:
सीकबेर के न्यूनतम मूल्य को कैसे परिभाषित किया जाए?
आप न्यूनतम मान को परिभाषित नहीं कर सकते। यह है 0
।
मूल रूप से मुझे अपना न्यूनतम मान 0 से 0.2 तक बदलना होगा
जब आपको मूल्य मिलता है, तो 0.2
इसे जोड़ें ।
SeekBar
0 से (अधिकतम-मिनट) सीमा का प्रतिनिधित्व करता है। समायोजित मूल्य प्राप्त करने के लिए, आप वास्तविक प्रगति के लिए अपना वांछित न्यूनतम जोड़ते हैं। चूंकि वास्तविक प्रगति पहले से ही "UI पर प्रतिबिंबित" है, इसलिए वहां बदलने के लिए कुछ भी नहीं है।
यहाँ मैं android:max
एक के लिए अधिकतम / मिनट रेंज के लिए उपयोग करने के लिए क्या है SeekBar
।
mSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
int progressChanged = minimumValue;
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
progressChanged = minimumValue+ progress;
}
});
तो आपको रेंज मिलेगी minimum to minimum+max
;
Xml में अधिकतम मान सेट करने के लिए, उपयोग करें max=(desiredMax-min)
;
जावा में सीकबेर ऑब्जेक्ट के लिए न्यूनतम मान 0 होना चाहिए (अर्थात, इसे बदला नहीं जा सकता है), लेकिन यह है कि आवश्यक रूप और प्रदर्शन कैसे प्राप्त करें।
मान लीजिए आप चाहते हैं कि आपका मिनट 5 हो और आपका अधिकतम 100 हो ...
इसलिए, आपके पास 95 की सीमा है, इसलिए आपको अधिकतम मूल्य के साथ सीकबार को स्थापित करना होगा 95
।
यदि आपके सीकर में UI लेबल हैं, तो आप उन्हें 5
(न्यूनतम) और 100
(अधिकतम) बनाएंगे ।
तो, लेआउट XML कुछ इस तरह होगा ...
<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>
तो अब आप 5
इस तरह करेक्शन को इंट्रोड्यूस कर सकते हैं ...
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);
}
}
});
यह समाधान आपके सीकर को UI पर अधिकतम न्यूनतम, अधिकतम और स्केल देगा, और नियंत्रण की स्थिति दाईं ओर 'कूद' नहीं पाएगी यदि उपयोगकर्ता इसे बाईं ओर सभी तरह से स्लाइड करता है।
मूल रूप से मैंने आकार + 10 जोड़ा है जो स्वचालित रूप से 10 मिनट तक सेट कर देगा आप इसे बदलने के लिए अपना समय बदल सकते हैं। मूल्य।
@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();
}
में > = 26 API संस्करण अब आप जोड़ सकते हैं min
seekbar को XML विशेषता:
android:min="0.2"
मेरा समाधान जो मेरे लिए ठीक काम करता है:
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (progress <= SOME_LIMIT) {
seekBar.setProgress(SOME_LIMIT);
} else {
// DO SOMETHING
}
}
आप फ़्लोट में प्रगति को सेट नहीं कर सकते हैं क्योंकि seekbar.getProgress () हमेशा पूर्णांक मान लौटाता है। निम्नलिखित कोड टेक्स्टव्यू वैल्यू को 0.2 पर सेट करेगा यदि सीकर का मान 0. है। आप अपनी आवश्यकता के अनुसार न्यूनतम बदल सकते हैं।
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) {
}
});
मैंने यह सरल पुस्तकालय बनाया है, यह ज्यादा नहीं है, लेकिन यह आपको कुछ समय बचा सकता है।
आप इस तरह से करने की कोशिश कर सकते हैं:
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) {
}
};
यह कोड मेरे लिए ठीक काम करता है !!!
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) {
}
};
मुझे अंत में seekBar
न्यूनतम मूल्य निर्धारित करने का एक तरीका मिला , बस अपना सेट 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);
}
});
उम्मीद है की यह मदद करेगा :)
यहाँ मैंने कोटलिन के साथ ऐसा कैसे किया:
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()
}
यदि आप उपयोग कर रहे हैं com.android.support:preference-v7
, तो SeekBarPreference
पहले से ही एक विधि है setMin(int)
।
बस फोन है कि में onCreatePreferences()
अपने की PreferenceFragmentCompat
।
XML मूल्यों को अभी भी एपीआई <26 पर नजरअंदाज किया जाएगा, लेकिन इसे प्रोग्रामेटिक रूप से सेट करना, काम करता है।
setProgress
ताकि परिवर्तन UI पर दिखाई दे - जैसे कि शैबॉलेक्स बीज़ेज़ उसके उत्तर में प्रदर्शित होता है।