Android SeekBar Minimum Değeri


81

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:


122

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.2ettiğinizde ona ekleyin .


setProgressSzabolcs 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 .
ban-geoengineering

4
@ user1617737: Hayır, yapmamalısın. Cevabının minimum değerle ilgisi yok. SeekBar0 (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.
CommonsWare

Tamam, bu etiketlerinizin nasıl ayarlandığına bağlı. Bunu yapmanın tek doğru yolu olduğunu düşündüğüm tam bir cevap verdim. stackoverflow.com/questions/3033135/…
ban-geoengineering

MIN etiketini minimum değer ile ayarlayın ve MAX etiketini maksimum değer ile ayarlayın. OnProgressChanged () 'de, geçerli değeriniz olan Label'ı progress + minValue olarak ayarlayın.
Rahul Rastogi

22

Burada android:maxbir 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);


2
Evet, bunun en iyi yaklaşım olduğunu düşünüyorum. Bir SeekBar'ın birimleri sadece soyut değerlerdir. İstediğiniz gerçek birimleri elde etmek için bunları basitçe kodda ayarlayabilirsiniz, bu yüzden cevabınıza oy verdim.
David George

9

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 5bö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'.


9

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

}

Temel olarak, minimumu otomatik olarak 10'a ayarlayacak olan + 10 boyutunu ekledim, hangi min. değer.
SALMAN

10
Lütfen cevabınızdaki kodu açıklamak için yorum kullanmayın, lütfen cevabın bir parçası olarak ekleyin.
Flexo

6

Gelen > = 26 API sürümleri artık ekleyebilir minseekbar için xml niteliğini:

android:min="0.2"


5

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
    }

} 

4

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

            }
        });


1

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

        }
    };

0

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

    }
};

0

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


0

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

0

Eğer kullanıyorsanız com.android.support:preference-v7, SeekBarPreferencezaten 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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.