Editext.setSelection with Seekbar Android - PullRequest
       46

Editext.setSelection with Seekbar Android

0 голосов
/ 22 января 2020

Привет , У меня возникла проблема с EditText и SeekBar.

Проблема
При перетаскивании панели поиска она отправит прогресс на EdiText, что обычное поведение, но когда я пытаюсь очистить нажатие кнопки очистки, EditText удалит только 1 ди git, как он может очистить все цифры, как обычно EditText? Спасибо большое руководство:)

Пример:
Мой EditText показывает 1000, если я нажму и удерживаю кнопку Стереть, результат будет 100, тогда ничего не произойдет, но то, что я хотел, это 100,10, 1 и очищается, это можно сделать? и как я могу это сделать?

mSbTest = findViewById(R.id.sb_testing);
mEtTextSize = findViewById(R.id.et_text_size);

    mSbTest.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(final SeekBar seekBar, int progress, boolean fromUser) {
            mEtTextSize.setText(String.valueOf(seekBar.getProgress()));
            mEtTextSize.setSelection(mEtTextSize.getText().length());
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
        }
    });

    mEtTextSize.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) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            if (!s.toString().isEmpty()) {
                setEditTextMaxLength(mEtTextSize, 9);
                mCustomBarChart.TextSize(Integer.valueOf(s.toString()));
                mCustomBarChart.invalidate();
                mEtTextSize.removeTextChangedListener(this);
                mSbTest.setProgress(selectedValue);
                selectedValue = Integer.valueOf(s.toString());
                mEtTextSize.addTextChangedListener(this);
            }
        }
    });

Ответы [ 2 ]

0 голосов
/ 03 февраля 2020

Я решил эту проблему сам и просим обратиться к приведенному ниже коду для дальнейшего использования. Также спасибо Avina sh за советы и идеи. Ура:)

 mSbTest = findViewById(R.id.sb_testing);
 mEtTextSize = findViewById(R.id.et_text_size);

    mSbTest.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(final SeekBar seekBar, final int progress, boolean fromUser) {
            if (fromUser) {
                mEtTextSize.setText(String.valueOf(progress));
                Selection.setSelection(mEtTextSize.getText(), mEtTextSize.length());
            }
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
        }
    });

   mEtTextSize.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) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            if (!s.toString().isEmpty()) {
                setEditTextMaxLength(mEtTextSize, 9);
                mEtTextSize.removeTextChangedListener(this);
                mEtTextSize.requestFocus();
                mSbTest.setProgress(Integer.valueOf(s.toString().trim()));
                mEtTextSize.addTextChangedListener(this);
            }
        }
    });
0 голосов
/ 22 января 2020

Пожалуйста, используйте этот, он отлично работает

    sikbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
           if(i>0){
                editText.setText(String.valueOf(i));
                editText.setSelection(String.valueOf(i).length());
            }

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    });

В onTextChange Используйте этот

  @Override
                public void afterTextChanged(Editable editable) {
                   if (!editable.toString().isEmpty()) {
                        int progress = Math.round(Float.parseFloat(editable.toString()));
                        sikbar.setProgress(progress);
                    }
                    else {
                        sikbar.setProgress(0);
                    }

// этот слушатель предназначен только для стирания всего текста одним нажатием. введите код здесь

     editText.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            //You can identify which key pressed buy checking keyCode value with KeyEvent.KEYCODE_
            if(keyCode == KeyEvent.KEYCODE_DEL) {
                //this is for backspace
                  mCountDownTimer.start();
            }
            return false;
        }
    });

В onTextChange Проверьте размер ввода, в противном случае выдается исключение.

добавьте таймер один за другим чистый текст после нескольких se c и сначала запустите таймер Keylistener.

  CountDownTimer mCountDownTimer(global variable);

    mCountDownTimer = new CountDownTimer(1200, 1000) {
        boolean mText=true;

        public void onTick(long millisUntilFinished) {
            String mainText = editText.getText().toString().trim();
            if(mainText.length()>0&& !mText){
            String text=mainText.substring(0, mainText.length() - 1);
                editText.setText(text);
                editText.setSelection(editText.getText().length());
                mText=true;

            }

        }

        public void onFinish() {
            String mainText = editText.getText().toString().trim();
            if(mainText.length()==0)
            {
                mCountDownTimer.cancel();
                mText=true;
            }
            else{

                mCountDownTimer.start();
                mText=false;
            }

        }

    };
...