Android SeekBar:更改值

时间:2015-10-26 15:24:02

标签: android seekbar

我正在编写一个代码块,我以编程方式创建c来捕获百分比。然后百分比显示在SeekBar中。我已经编写了代码以在屏幕上显示:

TextView

如何处理public static void pebbleTypeHandler(LinearLayout layout, final TaskSwitcherTask task, PData value) { // Create an android seek bar to allow thumb drag // Have a text view to display the value Log.v(PebbleTypeHandlerPercentage.class.toString(), "-----> Percentage"); SeekBar seekbar = new SeekBar(task.getParent()); TextView textView = new TextView(task.getParent()); textView.setTextColor(ColorStateList.valueOf(0xFFFFFFFF)); textView.setText(((PPercentage) value).getValue() + "%"); layout.addView(textView); layout.addView(seekbar); int id = UtilityMethods.getNextId(); value.getMeta().getDataPebble().setId(id); textView.setId(id); id = UtilityMethods.getNextId(); seekbar.setId(id); Log.v(PebbleTypeHandlerLevel.class.toString(), "-----> TextView ID: " + textView.getId()); Log.v(PebbleTypeHandlerLevel.class.toString(), "-----> SeekBar ID: " + seekbar.getId()); } 更改。我希望SeekBar值根据拇指位置而改变。最大百分比为100%,最小值为0%。

我还想在TextView上设置onClickListener,并根据输入的值更新TextView的位置,以便输入更准确的值。我的数据载体中的值Pebble,是一个浮点数,因为我希望允许SeekBar个数字。

任何帮助都将不胜感激。

此致

欧文

2 个答案:

答案 0 :(得分:5)

首先,您应该设置最大进度:

strokeWidthBar.setMax(<your max progress>);
strokeWidthBar.setProgress(0); // Set initial progress value

跟踪SeekBar的变化

seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
        textView.setText(String.valueOf(progress));
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {

    }
});

要从EditText更改SeekBar进度,您可以在EditText中添加TextWatcher

<强>更新 对于TextWatcher,您可以使用以下内容:

editText.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // Convert text to integer. Do you already use editText.setInputType(InputType.TYPE_CLASS_NUMBER), don't you?
        Integer enteredProgress = Integer.valueOf(s.toString());
        seekBar.setProgress(enteredProgress);
    }

    @Override
    public void afterTextChanged(Editable s) {}
});

答案 1 :(得分:0)

您将需要使用SeekBar对象和EditText而不是TextView,因为eidttext用于获取用户输入。 然后你必须在EditText上的seekBar和TextWatcher上添加seekbarChangeListener。我在下面举例说明。

    yourEditText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            //You can set value to seekbar here. obviously after checking if its valid and converting it into int/float.

              yourseekBar.setvalue(Integer.valueOf(s));
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

添加seekbarchanged侦听器,如。

yourseekbar.setOnSeekBarChangeListener(new  SeekBar.OnSeekBarChangeListener() {

 @Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
      //convert progress into float if you want but it should be multiple of 10        

    yourEdittext.setText(progress+"");
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {

}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {

}

});

由于seekbar只接受int值,因此您必须先将float值转换为整数。