Я нашел решение, прочитав документацию и stackoverflow.Я публикую здесь полный пример, чтобы упростить воспроизведение поведения.
К сожалению, не существует способа простой настройки свойства xml, которое позволяло бы счетчику оставаться в видимой области экрана.
Решение заключается в использовании класса интерфейса TextWatchers, который, к счастью, требует всего несколько строк кода.
1) Create res / values / strings.xml файл для определения константы для максимального размера символа
<integer name="max_comment_size">50</integer>
2) добавьте следующие два представления в вашу деятельность т.е. res / layout / activity_main.xml
Мне нравится, когда счетчик сверху.Вы можете поменять местами TextView и TextEdit, если предпочитаете располагать их внизу.
<TextView
android:id="@+id/constraint_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Remaining characters/Maximum characters: --/--" />
<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textMultiLine"
android:maxLength="@integer/max_comment_size" />
Обратите внимание, что textMultiLine не ограничивает количество максимальных строк для поля EditText.Это только ограничивает размер макета.С maxLength вы можете указать максимальное количество разрешенных символов.
3) Используйте TextWatcher в Java-файле для подсчета введенных символов и отображения их в Java-файле TextView в моемНапример: java / com / example / mycompany / textcounter / MainActivity.java
Интерфейсный класс TextWatcher имеет три метода, которые необходимо реализовать.Тем не менее, только onTextChange () представляет интерес для нас.
public class MainActivity extends AppCompatActivity {
private TextView mTextView;
private EditText mEditText;
private final TextWatcher mTextEditorWatcher = new TextWatcher() {
public void beforeTextChanged(CharSequence s, int start, int count, int after) { } //nothing to be done here
public void onTextChanged(CharSequence s, int start, int before, int count) {
Integer max_comment = getResources().getInteger(R.integer.max_comment_size);
mTextView.setText("Remaining characters" + "/Maximum characters: "+ String.valueOf(max_comment-s.length()) +"/" + max_comment);
}
public void afterTextChanged(Editable s) { } //nothing to be done here
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Initializing views
mEditText = (EditText) findViewById(R.id.editText);
mTextView = (TextView) findViewById(R.id.constraint_textview);
mEditText.addTextChangedListener(mTextEditorWatcher);
}
}
Дополнительные примечания:
Решение основано на информации, предоставленной здесь о счетчике с экрана и здесь о том, как использовать TextWatcher
См. Документацию для Android по TextWatcher и TextEdit , тоже.
Я ограничил максимальное количество вводимых символов в поле TextEdit с помощью maxLength.Если вам нужно ограничить максимальное количество строк, см. Обсуждение и возможные решения здесь и здесь или используйте поиск по stackoverflow.