SeekBarの最小値を定義する方法を知っている人はいますか?これはXMLレイアウトで行われますか、それをプログラムで定義する必要がありますか?
基本的に、最小値を0から0.2に変更する必要があります
こんにちは、SeekBarの最小値を定義する方法を知っている人はいますか?
最小値を定義することはできません。 0
です。
基本的に、最小値を0から0.2に変更する必要があります
値を取得したら、0.2
を追加します。
以下は、SeekBar
の最大/最小範囲で_Android:max
_を取得するために使用するものです。
_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)
;を使用します。
基本的には、最小値を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();
}
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>
nowこのように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のスケールを提供します。ユーザーがコントロールを左いっぱいにスライドしても、コントロールの位置は右に「ジャンプ」しません。
私のためにうまくいく私のソリューションは:
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (progress <= SOME_LIMIT) {
seekBar.setProgress(SOME_LIMIT);
} else {
// DO SOMETHING
}
}
seekbar.getProgress()は常に整数値を返すため、フロートで進行状況を設定することはできません。シークバー値が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では、min
xml属性をSeekBarに追加できます。
Android:min="0.2"
この単純なライブラリを作成しましたが、それほど多くはありませんが、時間を節約できます。
この方法で試すことができます:
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
最小値を設定する方法をようやく見つけました。次のように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);
}
});
お役に立てれば :)
_com.Android.support:preference-v7
_を使用している場合、SeekBarPreference
には既にメソッドsetMin(int)
があります。
PreferenceFragmentCompat
のonCreatePreferences()
で呼び出すだけです。
XML値はAPI <26では引き続き無視されますが、プログラムで設定すると機能します。
JoãoMagalhãesが言うように:
以下を使用して、SeekBarにmin xml属性を追加できます。
Android:min="0.2"
ただし、API <26の場合、compat属性を使用する方が適切です;):
xmlns:app="http://schemas.Android.com/apk/res-auto"
app:min="0.2"
このコードは私のためにうまくいきます!!!
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) {
}
};
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()
}