Android TextView: как динамически изменять макет при вводе текста - PullRequest
0 голосов
/ 16 июня 2020

Мне нужно настроить кнопку на «видимую» или «исчезнувшую» динамически в зависимости от типа пользователя в поле TextView. Используя приведенный ниже оператор, я смог выполнить sh его при нажатии 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
}

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

Ответы [ 3 ]

2 голосов
/ 16 июня 2020

Вы можете использовать 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
            }

        }
    });

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

0 голосов
/ 18 июня 2020

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

binding.textField.doAfterTextChanged { text: Editable? ->
    if (text.toString().trim().isEmpty()){
        binding.button.visibility = View.GONE
    } else{
        binding.button.visibility = View.VISIBLE
    }
0 голосов
/ 16 июня 2020

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

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