Как ограничить ввод текста границами элемента Edittext
Имеется активность, на которой по задумке, друг за другом в горизонтальном расположении находятся два элемента Edittext вложенных в Linear layout, у всех ширина контролируется двумя атрибутами:
layout_width="match_parent" и layout_weight=" "
Соответственно на разных экранах, ширина элемента будет разная. Вопрос: как ограничить ввод текста в Edittext рамками элемента? Иначе при вводе длинного текста, он заезжает за "видимые" границы элемента и текст тупо не видно.
Атрибут maxLength не подойдёт - он жестко регламентирует количество возможных символов. Перенос строки на следующую тоже нет, все в одну строку должно быть.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<EditText
android:id="@+id/ed_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="textPersonName"
android:text="Name_1" />
<EditText
android:id="@+id/ed_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="3"
android:ems="10"
android:inputType="textPersonName"
android:text="Name_2" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
Ответы (1 шт):
Я думаю, возможно использование TextWatcher:
final EditText et = (EditText) findViewById(R.id.et);
et.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) {
if (et.getLineCount() > 1) {
et.setText(s.toString().substring(0, start));
et.setSelection(start);
};
};
@Override
public void afterTextChanged(Editable s) {
};
});
Если количество линий не будет равно 1, то убрать последний символ и перенести курсор в конец.