Android TextView: как динамически изменять макет при вводе текста

Мне нужно сделать кнопку "видимой" или "исчезнувшей" динамически по мере того, как пользователь вводит текст в поле TextView. Используя приведенный ниже оператор, я смог выполнить это при нажатии Enter, но было бы здорово, если бы кнопка стала видимой или исчезла сразу же, когда пользователь вводит или удаляет текстовое содержимое. Любое предложение?

binding.textField.setOnEditorActionListener { v, actionId, event -> 
    if (v.text.toString().trim().isEmpty()){
        binding.button.visibility = View.GONE
    } else{
        binding.button.visibility = View.VISIBLE
    }

    return@setOnEditorActionListener true
}

Заранее благодарю за внимание! Родриго Томаз.

3 ответа

Вы можете использовать addTextChangedListener в вашем EditText.

Нравится:

binding.textField.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void afterTextChanged(Editable editable) {

            if (editable.toString().trim().isEmpty()){
               binding.button.visibility = View.GONE
            } else{
               binding.button.visibility = View.VISIBLE
            }

        }
    });

Надеюсь, что это поможет:)

Вы должны добавить textchangelistner в свой редактируемый текст и скрыть кнопку при изменении текста

binding.textField.addTextChangedListener(new TextWatcher() {

       @Override
       public void afterTextChanged(Editable s) {}

       @Override    
       public void beforeTextChanged(CharSequence s, int start,
         int count, int after) {
       }

       @Override    
       public void onTextChanged(CharSequence s, int start,
         int before, int count) {
        binding.button.visibility = View.GONE
       }
      });

Kotlin предлагает упрощенный доступ к функциям переопределения. Вот моя последняя (рабочая) реализация, к сожалению:

binding.textField.doAfterTextChanged { text: Editable? ->
    if (text.toString().trim().isEmpty()){
        binding.button.visibility = View.GONE
    } else{
        binding.button.visibility = View.VISIBLE
    }
Другие вопросы по тегам