Android SeekBar 최소값


81

SeekBar의 최소값을 정의하는 방법은 무엇입니까? XML 레이아웃에서 수행됩니까, 아니면 프로그래밍 방식으로 정의해야합니까?

기본적으로 최소값을 0에서 0.2로 변경해야합니다.

답변:


122

SeekBar의 최소값을 정의하는 방법은 무엇입니까?

최소값을 정의 할 수 없습니다. 입니다 0.

기본적으로 최소값을 0에서 0.2로 변경해야합니다.

가치를 얻으면 추가 0.2하십시오.


setProgressSzabolcs Becze가 그의 답변에서 보여주는 것처럼 변경 사항이 UI에 반영되도록 전화를 걸어야합니다.
ban-geoengineering

4
@ user1617737 : 아니요, 안됩니다. 그의 대답은 최소값과 관련이 없습니다. 는 SeekBar0부터 (최대 - 최소)의 범위를 나타낸다. 조정 된 값을 얻으려면 실제 진행률에 원하는 최소값을 추가합니다. 실제 진행 상황은 이미 "UI에 반영"되어 있으므로 변경할 사항이 없습니다.
CommonsWare

좋습니다. 레이블 설정 방법에 따라 다릅니다. 나는 그것을하는 유일한 올바른 방법이라고 생각하는 완전한 대답을 방금 제공했습니다. stackoverflow.com/questions/3033135/...
금지 - 지구 공학

최소값으로 MIN 레이블을 설정하고 최대 값으로 MAX 레이블을 설정합니다. onProgressChanged ()에서 현재 값 레이블을 progress + minValue로 설정합니다.
Rahul Rastogi 2015

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이므로 최대 값이 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

기본적으로 최소값을 10으로 자동 설정하는 size + 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으로 자동 설정하는 size + 10을 추가했습니다. value.
SALMAN

10
답변에 코드를 설명하기 위해 주석을 사용하지 말고 답변 자체의 일부로 포함하십시오.
Flexo

6

API 버전> = 26 에서는 이제 minSeekBar 에 xml 속성을 추가 할 수 있습니다 .

android:min="0.2"


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 ()는 항상 정수 값을 반환하기 때문에 float에서 진행률을 설정할 수 없습니다. 다음 코드는 seekbar 값이 0이면 textview 값을 0.2로 설정합니다. 요구 사항에 따라 minimumVal을 변경할 수 있습니다.

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-v7경우 SeekBarPreference이미 방법이 setMin(int)있습니다.

그냥 그 전화를 onCreatePreferences()당신의 PreferenceFragmentCompat.

API <26에서는 XML 값이 여전히 무시되지만 프로그래밍 방식으로 설정하면 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.