AndroidSeekBarの最小値


81

SeekBarの最小値を定義する方法は?これはXMLレイアウトで行われますか、それともプログラムで定義する必要がありますか?

基本的に、最小値を0から0.2に変更する必要があります

回答:


122

SeekBarの最小値を定義する方法は?

最小値を定義することはできません。です0

基本的に、最小値を0から0.2に変更する必要があります

値を取得したら、0.2それに追加します。


setProgressSzabolcs Beczeが彼の回答で示しているように、変更がUIに反映されるように呼び出す必要があります。
ban-geoengineering 2014

4
@ user1617737:いいえ、すべきではありません。彼の答えは最小値とは何の関係もありません。SeekBar0から(最大-最小)までの範囲を表します。調整された値を取得するには、実際の進行状況に必要な最小値を追加します。実際の進捗状況はすでに「UIに反映」されているため、変更する必要はありません。
CommonsWare 2014

OK、それはあなたのラベルがどのように設定されているかに依存します。私はそれを行う唯一の正しい方法だと思う完全な答えを提供しました。stackoverflow.com/questions/3033135/...
禁止-ジオエンジニアリング

最小値でMINラベルを設定し、最大値でMAXラベルを設定します。onProgressChanged()で、現在の値Labelを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であるため、SeekBarを最大値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でシークバーに正しい最小、最大、およびスケールを提供し、ユーザーがコントロールを左端までスライドさせても、コントロールの位置が右に「ジャンプ」しません。


9

基本的に私はサイズ+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();

}

基本的に私はサイズ+10を追加しました。これは自動的に最小値を10に設定します。あなたはそれをどの最小値に設定するかを変更できます。値。
SALMAN 2011年

10
回答のコードを説明するためにコメントを使用しないでください。回答自体の一部として含めてください。
フレキソ


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で進行状況を設定することはできません。シークバーの値が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-v7SeekBarPreferenceている場合は、すでにメソッドがありsetMin(int)ます。

onCreatePreferences()のでそれを呼び出すだけPreferenceFragmentCompatです。

XML値はAPI <26でも無視されますが、プログラムで設定しても機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.