code

Android SeekBar 최소값

codestyles 2020. 10. 16. 07:27
반응형

Android SeekBar 최소값


누구든지 SeekBar의 최소값을 정의하는 방법을 알고 있습니까? XML 레이아웃에서 수행됩니까? 아니면 프로그래밍 방식으로 정의해야합니까?

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


안녕하세요, SeekBar의 최소값을 정의하는 방법을 아는 사람이 있습니까?

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

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

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


다음은 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);


Java의 SeekBar 객체에 대한 최소값은 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에서 탐색 막대에 올바른 최소, 최대 및 크기를 제공하며 사용자가 왼쪽으로 끝까지 밀어도 컨트롤의 위치가 오른쪽으로 '점프'되지 않습니다.


기본적으로 최소값을 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();

}

나를 위해 잘 작동하는 내 솔루션은 다음과 같습니다.

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

} 

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

            }
        });

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

android:min="0.2"


이 간단한 라이브러리를 만들었는데 그다지 많지는 않지만 시간을 절약 할 수 있습니다.

https://github.com/joaocsousa/DoubleSeekBar


이 방법으로 시도해 볼 수 있습니다.

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

        }
    };

이 코드는 나를 위해 잘 작동합니다!

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

    }
};

마침내 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);

    }
});

도움이 되었기를 바랍니다 :)


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

사용중인 com.android.support:preference-v7경우 SeekBarPreference이미 방법이 setMin(int)있습니다.

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

XML values will still be ignored on API < 26 but setting it programatically, works.


As say João Magalhães :

you can now add min xml attribute to SeekBar with :

android:min="0.2"

But it's better for API < 26 to use compat attribute ;) :

xmlns:app="http://schemas.android.com/apk/res-auto"
app:min="0.2"

Edit : The prerequisite is obvious that you are using compatibility libraries (AppCompat or AndroidX).

참고URL : https://stackoverflow.com/questions/3033135/android-seekbar-minimum-value

반응형