有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓如何定义SeekBar的最小值、最大值和范围?这是在XML布局中完成的,还是需要在java中定义?

如何定义搜索栏的最小值、最大值和范围?这是在XML布局中完成的,还是需要在java中定义

我想使用安卓 studio为搜索栏设置最小值(0.2)、最大值(3.4)和范围(0.8)。请解决这个问题

它将帮助我集成tflite文件。为此,我需要先设置范围。请回顾我的问题


    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    xmlns:tools="http://schemas.安卓.com/tools"
    安卓:layout_width="match_parent"
    安卓:layout_height="match_parent"
    安卓:orientation="vertical"
    tools:context=".MainActivity">

    <SeekBar
        安卓:id="@+id/seekBar1"
        安卓:layout_width="219dp"
        安卓:layout_height="wrap_content"
        安卓:layout_alignParentTop="true"
        安卓:layout_marginLeft="40dp"
        安卓:layout_marginTop="366dp"
        安卓:indeterminate="false"
        安卓:max="100"
        安卓:progress="0" />


    <EditText
        安卓:id="@+id/editText1"
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:layout_alignParentStart="true"
        安卓:layout_alignParentLeft="true"
        安卓:layout_alignParentTop="true"
        安卓:layout_alignParentEnd="true"
        安卓:layout_alignParentRight="true"
        安卓:layout_marginStart="280dp"
        安卓:layout_marginLeft="280dp"
        安卓:layout_marginTop="343dp"
        安卓:layout_marginEnd="30dp"
        安卓:layout_marginRight="54dp"
        安卓:ems="10"
        安卓:inputType="textPersonName"
        安卓:text="Name" />


</RelativeLayout>

public class MainActivity extends AppCompatActivity {
private EditText tView;
private SeekBar sBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    SeekBar sBar1 = (SeekBar) findViewById(R.id.seekBar1);               //id set for input;
    EditText tView1 = (EditText) findViewById(R.id.editText1);            //id set for output;

    sBar1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        float pval = 0;

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            pval = progress;
            tView1.setText(pval + "/" + seekBar.getMax());


        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            //write custom code to on start progress
        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

            tView1.setText(pval + "/" + seekBar.getMax());
        }
    });
}

共 (1) 个答案

  1. # 1 楼答案

    您可以自定义SeekBar。 请看这个网址。 https://stackoverflow.com/a/52350712/10247147

    data class Range(val min: Int, val max: Int, private val defaultIncrement: Int) {
        val increment = if ((max - min) < defaultIncrement) 1 else defaultIncrement
    }
    
    
    internal fun Range.toSeekbarMaximum(): Int = (max - min) / increment
    
    
    class RangeSeekBar: SeekBar, SeekBar.OnSeekBarChangeListener {
    
        constructor(context: Context) : super(context)
        constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
    
        var range: Range = Range(0, 100, 1)
            set(value) {
                field = value
                max = value.toSeekbarMaximum()
            }
    
        var value: Int = 0
            get() = range.min + progress * range.increment
            set(value) {
                progress = (value - range.min) / range.increment
                field = value
            }
    
        var onSeekBarChangeListenerDelegate: OnSeekBarChangeListener? = this
    
        override fun setOnSeekBarChangeListener(l: OnSeekBarChangeListener?) {
            onSeekBarChangeListenerDelegate = l
            super.setOnSeekBarChangeListener(this)
        }
    
        override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
            onSeekBarChangeListenerDelegate?.onProgressChanged(seekBar, value, fromUser)
        }
    
        override fun onStartTrackingTouch(seekBar: SeekBar?) {
            onSeekBarChangeListenerDelegate?.onStartTrackingTouch(seekBar)
        }
    
        override fun onStopTrackingTouch(seekBar: SeekBar?) {
            onSeekBarChangeListenerDelegate?.onStopTrackingTouch(seekBar)
        }
    }