Android SeekBar न्यूनतम मूल्य


81

सीकबेर के न्यूनतम मूल्य को कैसे परिभाषित किया जाए? क्या यह XML लेआउट में किया गया है या क्या मुझे इसे प्रोग्रामेटिक रूप से परिभाषित करने की आवश्यकता है?

मूल रूप से मुझे अपना न्यूनतम मान 0 से 0.2 तक बदलना होगा

जवाबों:


122

सीकबेर के न्यूनतम मूल्य को कैसे परिभाषित किया जाए?

आप न्यूनतम मान को परिभाषित नहीं कर सकते। यह है 0

मूल रूप से मुझे अपना न्यूनतम मान 0 से 0.2 तक बदलना होगा

जब आपको मूल्य मिलता है, तो 0.2इसे जोड़ें ।


आपको कॉल करना चाहिए setProgressताकि परिवर्तन UI पर दिखाई दे - जैसे कि शैबॉलेक्स बीज़ेज़ उसके उत्तर में प्रदर्शित होता है।
प्रतिबंध-जियोइंजीनियरिंग

4
@ user1617737: नहीं, आपको नहीं करना चाहिए। उसके जवाब का न्यूनतम मूल्य से कोई लेना-देना नहीं है। SeekBar0 से (अधिकतम-मिनट) सीमा का प्रतिनिधित्व करता है। समायोजित मूल्य प्राप्त करने के लिए, आप वास्तविक प्रगति के लिए अपना वांछित न्यूनतम जोड़ते हैं। चूंकि वास्तविक प्रगति पहले से ही "UI पर प्रतिबिंबित" है, इसलिए वहां बदलने के लिए कुछ भी नहीं है।
कॉमंसवेयर

ठीक है, अच्छी तरह से यह निर्भर करता है कि आपके लेबल कैसे सेट किए जाते हैं। मैंने अभी एक पूर्ण उत्तर दिया है जो मुझे लगता है कि यह करने का एकमात्र सही तरीका है। stackoverflow.com/questions/3033135/…
प्रतिबंध-जियोइंजीनियरिंग

न्यूनतम मान के साथ MIN लेबल सेट करें और अधिकतम मान के साथ MAX लेबल सेट करें। OnProgressChanged () में, अपने वर्तमान मान लेबल को प्रगति + minValue के रूप में सेट करें।
राहुल रस्तोगी

22

यहाँ मैं 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);


2
हां मुझे लगता है कि यह सबसे अच्छा तरीका है। एक सीकबार की इकाइयाँ केवल अमूर्त मूल्य हैं। आप अपनी इच्छित वास्तविक इकाइयों को प्राप्त करने के लिए बस उन्हें कोड में समायोजित कर सकते हैं, इसलिए मैंने आपके उत्तर को बदल दिया है।
डेविड जॉर्ज

9

जावा में सीकबेर ऑब्जेक्ट के लिए न्यूनतम मान 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 पर अधिकतम न्यूनतम, अधिकतम और स्केल देगा, और नियंत्रण की स्थिति दाईं ओर 'कूद' नहीं पाएगी यदि उपयोगकर्ता इसे बाईं ओर सभी तरह से स्लाइड करता है।


9

मूल रूप से मैंने आकार + 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();

}

मूल रूप से मैंने आकार + 10 जोड़ा है जो स्वचालित रूप से 10 मिनट तक सेट कर देगा आप इसे बदलने के लिए अपना समय बदल सकते हैं। मान।
सालमन नोव

10
कृपया अपने उत्तर में कोड को समझाने के लिए टिप्पणियों का उपयोग न करें, कृपया इसे उत्तर के भाग के रूप में शामिल करें।
फ्लेक्सो


5

मेरा समाधान जो मेरे लिए ठीक काम करता है:

    @Override 
 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    if (progress <= SOME_LIMIT) {
        seekBar.setProgress(SOME_LIMIT);
    } else {
       // DO SOMETHING
    }

} 

4

आप फ़्लोट में प्रगति को सेट नहीं कर सकते हैं क्योंकि 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) {

            }
        });


1

आप इस तरह से करने की कोशिश कर सकते हैं:

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

यह कोड मेरे लिए ठीक काम करता है !!!

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

    }
};

0

मुझे अंत में 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);

    }
});

उम्मीद है की यह मदद करेगा :)


0

यहाँ मैंने कोटलिन के साथ ऐसा कैसे किया:

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

0

यदि आप उपयोग कर रहे हैं com.android.support:preference-v7, तो SeekBarPreferenceपहले से ही एक विधि है setMin(int)

बस फोन है कि में onCreatePreferences()अपने की PreferenceFragmentCompat

XML मूल्यों को अभी भी एपीआई <26 पर नजरअंदाज किया जाएगा, लेकिन इसे प्रोग्रामेटिक रूप से सेट करना, काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.