Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android SeekBar: Changing the value

I am writing a block of code where I am programmatically creating a SeekBar to capture a percentage. The percentage is then displayed in a TextView. I have written the code to display both on screen:

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

How can I handle the SeekBar change. I want the TextView value to change depending on the thumb position. The maximum percentage is 100% and the minimum is 0%.

I would also like to set an onClickListener on the TextView and update the position of the SeekBar based on the entered value to allow for more accurate values to be entered. The value in my data carrier, called Pebble, is a float as I would like to allow Float numbers.

Any help would be appreciated.

Regards,

Owen

like image 449
Owen Nel Avatar asked Nov 28 '25 15:11

Owen Nel


1 Answers

First of all, you should set max progress:

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

Tracking changes of 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) {

    }
});

And for changing SeekBar progress from EditText, you can add a TextWatcher to your EditText

Update For the TextWatcher you can use something like this:

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) {}
});
like image 66
Roman Zhukov Avatar answered Nov 30 '25 04:11

Roman Zhukov



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!