Android SeekBar最小值


81

如何定义SeekBar的最小值?这是在XML布局中完成的还是我需要以编程方式定义它?

基本上我需要将最小值从0更改为0.2

Answers:


122

如何定义SeekBar的最小值?

您无法定义最小值。是的0

基本上我需要将最小值从0更改为0.2

获得值后,将0.2其添加。


您也应该致电,setProgress以便使更改反映在用户界面上-正如Szabolcs Becze在他的回答中所展示的。
ban-geoengineering,2014年

4
@ user1617737:不,你不应该。他的回答与最小值无关。的SeekBar表示从0到(最大值-最小值)的范围内。要获得调整后的值,请将所需的最小值添加到实际进度中。由于实际的进度已经“反映在UI上”,因此没有任何更改。
CommonsWare,2014年

好的,这取决于标签的设置方式。我刚刚提供了一个完整的答案,我认为这是唯一的正确方法。stackoverflow.com/questions/3033135/...
禁令,地球工程

将MIN标签设置为最小值,将MAX标签设置为最大值。在onProgressChanged()中,将当前值Label设置为progress + minValue。
Rahul Rastogi

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
是的,我认为这是最好的方法。SeekBar的单位仅仅是抽象值。您可以简单地在代码中对其进行调整,以获得所需的实际单位,因此我对您的回答进行了投票。
大卫·乔治

9

Java中SeekBar对象的最小值必须为0(即,不能更改),但这是获得所需外观和性能的方法。

假设您希望最小为5,最大为100 ...

因此,您的范围是95,因此您需要将SeekBar的最大值设置为95

如果seekbar有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

基本上,我添加了size + 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();

}

基本上,我添加了size + 10,它将自动将最小值设置为10,您可以更改最小值以将其设置为最小值。价值。
SALMAN

10
请不要在注释中使用注释来解释代码,而应将其作为答案的一部分。
Flexo


5

我适合的我的解决方案是:

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

} 

4

您不能在float中设置进度,因为seekbar.getProgress()始终返回整数值。如果seekbar值为0,下面的代码会将textview的值设置为0.2。您可以根据需要更改minimateVal。

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

这是我与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()
    }

0

如果您正在使用com.android.support:preference-v7SeekBarPreference已经有一种方法setMin(int)

只需在onCreatePreferences()您的电话中拨打该电话即可PreferenceFragmentCompat

XML值在<26的API上仍然会被忽略,但是可以通过编程设置它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.