Счет живого персонажа для EditText

Мне было интересно, что лучший способ сделать живое количество символов текстового поля в Android. Я смотрел на это, но, похоже, я не мог понять.

Чтобы описать проблему, у меня есть EditText, и я пытаюсь ограничить символы до 150. Я могу сделать это с помощью фильтра ввода, однако я хочу показать прямо под текстовым полем количество символов, введенных пользователем (почти как переполнение стека делает прямо сейчас).

Если бы кто-то мог написать небольшой fragment кода примера или указать мне в правильном направлении, я бы очень его оценил.

вы можете использовать TextWatcher, чтобы увидеть, когда текст изменился

private TextView mTextView; private EditText mEditText; private final TextWatcher mTextEditorWatcher = new TextWatcher() { public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { //This sets a textview to the current length mTextView.setText(String.valueOf(s.length())); } public void afterTextChanged(Editable s) { } }; 

вы устанавливаете TextWatcher для edittext с

 mEditText.addTextChangedListener(mTextEditorWatcher); 

Вы можете выполнить подсчет символов из самого XML с помощью оболочки TextInputLayout для EditText, представленной в SupportLibrary v23.1

Просто заверните свой EditText с помощью TextInputLayout и установите для параметра CounterEnabled значение true и установите counterMaxLength.

    

Вы получите такой существенный эффект, как это

Вы можете использовать counterOverflowTextAppearance , counterTextAppearance для стилизации счетчика.

РЕДАКТИРОВАТЬ

Из документации для Android.

Класс TextInputEditText предоставляется для использования в качестве дочернего элемента этого макета. Использование TextInputEditText позволяет TextInputLayout больше контролировать визуальные аспекты любого ввода текста. Пример использования так:

     

TextInputLayout TextInputEditText

Вы можете сделать это с помощью TextInputLayout и совместимых библиотек с помощью:

 app:counterEnabled="true" app:counterMaxLength="420" 

и завершить:

    

Его очень просто Следуйте инструкциям ниже:

==== Добавьте их в свои Импорты ===

 import android.text.Editable; import android.text.TextWatcher; 

===== Определите это =====

 private TextView sms_count; 

========== Внутри On Create =====

 sms_count = (TextView) findViewById(R.id.textView2); final TextWatcher txwatcher = new TextWatcher() { public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { sms_count.setText(String.valueOf(s.length())); } public void afterTextChanged(Editable s) { } }; sms_message.addTextChangedListener(txwatcher); 
  You can use TextWatcher class to see text has changed and how much number of character remains.Here i have set counter of 140 characters. EditText typeMessageToPost; TextView number_of_character; public void onCreate(Bundle savedBundleInstance) { super.onCreate(savedBundleInstance); setContentView(R.layout.post_activity); typeMessageToPost.addTextChangedListener(mTextEditorWatcher); } private final TextWatcher mTextEditorWatcher=new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub number_of_character.setText(String.valueOf(140-s.length())); } }; 

в xml добавить этот атрибут для editText

  android:maxLength="80" 

в java добавить этого слушателя

  ed_caption.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) { tv_counter.setText(80 - s.toString().length() + "/80"); } }); 

Просто установите эти 2 строки в TextInputLayout в XML-файле:

 app:counterEnabled="true" app:counterMaxLength="200" 

Я встретил ту же проблему, и я попробовал метод Камерона. Он работает, но есть незначительная ошибка: если пользователь использует копию и вставку, то он не может считать символы. Поэтому я предлагаю сделать после изменения текста, как показано ниже:

  private final TextWatcher mTextEditorWatcher = new TextWatcher() { public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { } public void afterTextChanged(Editable s) { //This sets a textview to the current length mTextView.setText(String.valueOf(s.length())); } }; 

Использовать android: maxLength = “140”

Это должно сработать. 🙂

надеюсь, это поможет

Попробуйте сделать что-то подобное.

Это решение может быть более эффективным, в отличие от получения CharSequence.length. Каждый раз, когда вы нажимаете на мягкую клавиатуру, срабатывает событие; поэтому, если вы делаете длину, он будет каждый раз подсчитывать CharSequence, что может замедляться, если вы начнете получать большие CharSequnces. При прослушивании событий при изменении текста происходит подсчет до и после счета. Это хорошо работает для значений увеличения и уменьшения

 @Override public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) { int tick = start + after; if(tick < mMessageMax) { int remaining = mMessageMax - tick; ((TextView)findViewById(R.id.contact_us_chars)).setText(String.valueOf(remaining)); } } 
  • Как установить идентификатор динамически созданного макета?
  • Установите стиль TextView (жирный или курсив)
  • Android BOOT_COMPLETED не получен, когда приложение закрыто
  • Фрагмент onSaveInstanceState () никогда не вызывается
  • Не удалось загрузить карту. Ошибка при обращении к серверам Google. Вероятно, это проблема аутентификации
  • Как установить фоновый рисунок кнопки изображения для разных состояний?
  • Проверьте, активна ли активность
  • Тип ошибки 3: Класс активности {...} не существует
  • Изменить громкость в Android?
  • Как нарисовать пунктирную линию с андроидом google map sdk v2?
  • Получение ошибки «Активность Java.lang.IllegalStateException была уничтожена» при использовании вкладок с ViewPager
  • Interesting Posts

    Получите силу сигнала Bluetooth

    Создание SearchView, который выглядит как руководство по разработке материалов

    Как показать данные JRBeanCollectionDataSource с помощью компонента Table?

    Как запустить только один тестовый class по gradleуировке

    Как создать class Java, который реализует один интерфейс с двумя универсальными типами?

    Как получить сетевую статистику в реальном времени в Linux с помощью формата KB / MB / Bytes и для конкретного идентификатора процесса или порта

    Отключено: нет доступных методов аутентификации

    Как отображать навигационный ящик во всех действиях?

    Удалить или переименовать файл с \ r в качестве имени файла

    Как resize изображения в Qt?

    Как получить доступ к методам формы и элементам управления из classа в C #?

    Приложение зависает или «Не работает stream приложений FX» происходит во время активности приложения

    Как использовать функцию поиска в пользовательском представлении списка в Android

    Где я могу получить ключ продукта для загрузки с Windows 8?

    Связывание данных в пользовательских элементах WPF

    Давайте будем гением компьютера.