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.