Android
Редактировать текст
Поиск…
Работа с EditTexts
EditText - это стандартный виджет ввода текста в приложениях Android. Если пользователю нужно вводить текст в приложение, это основной способ сделать это.
Редактировать текст
Существует множество важных свойств, которые можно настроить для настройки поведения EditText. Некоторые из них перечислены ниже. Ознакомьтесь с официальным руководством по текстовым полям для получения более подробной информации о полевых условиях.
использование
EditText добавляется в макет со всеми стандартными поведением со следующим XML:
<EditText
android:id="@+id/et_simple"
android:layout_height="wrap_content"
android:layout_width="match_parent">
</EditText>
Обратите внимание, что EditText - это просто тонкое расширение TextView и наследует все те же свойства.
Получение значения
Получение значения текста, введенного в EditText, выглядит следующим образом:
EditText simpleEditText = (EditText) findViewById(R.id.et_simple);
String strValue = simpleEditText.getText().toString();
Дальнейшая настройка входа
Возможно, мы захотим ограничить запись одной строкой текста (избегайте новых строк):
<EditText
android:singleLine="true"
android:lines="1"
/>
Вы можете ограничить символы, которые можно ввести в поле, используя атрибут цифр:
<EditText
android:inputType="number"
android:digits="01"
/>
Это ограничило бы введенные цифры только «0» и «1». Мы могли бы ограничить общее количество символов:
<EditText
android:maxLength="5"
/>
Используя эти свойства, мы можем определить ожидаемое поведение ввода для текстовых полей.
Регулировка цветов
Вы можете отрегулировать цвет фона выделения выделенного текста в EditText с помощью свойства android:textColorHighlight
:
<EditText
android:textColorHighlight="#7cff88"
/>
Отображение подсказок для закладок
Возможно, вы захотите установить подсказку для элемента управления EditText, чтобы пригласить пользователя для определенного ввода с помощью:
<EditText
...
android:hint="@string/my_hint">
</EditText>
Советы
Изменение цвета нижней строки
Предполагая, что вы используете библиотеку AppCompat, вы можете переопределить стили colorControlNormal, colorControlActivated и colorControlHighlight:
<style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorControlNormal">#d32f2f</item>
<item name="colorControlActivated">#ff5722</item>
<item name="colorControlHighlight">#f44336</item>
</style>
Если вы не видите эти стили, применяемые в диалоговом окне DialogFragment, существует известная ошибка при использовании LayoutInflater, переданного в метод onCreateView ().
Эта проблема уже исправлена в библиотеке AppCompat v23. См. Это руководство о том, как обновить. Другим временным обходным решением является использование надувного устройства макета Activity вместо того, которое было передано в метод onCreateView ():
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_fragment, container);
}
Прослушивание ввода EditText
Посмотрите на базовые прослушиватели событий, чтобы посмотреть, как слушать изменения в EditText и выполнять действие, когда происходят эти изменения.
Отображение информации о плавающей этикетке
Традиционно EditText скрывает сообщение подсказки (объяснено выше) после того, как пользователь начинает вводить текст. Кроме того, все сообщения об ошибках проверки должны были управляться разработчиком вручную.
С помощью TextInputLayout
вы можете настроить плавающую метку для отображения подсказок и сообщений об ошибках. Здесь вы можете найти более подробную информацию .
Настройка InputType
Текстовые поля могут иметь разные типы ввода, такие как число, дата, пароль или адрес электронной почты. Тип определяет, какие символы разрешены внутри поля, и может предложить виртуальной клавиатуре оптимизировать свой макет для часто используемых символов.
По умолчанию любое текстовое содержимое в элементе управления EditText
отображается как обычный текст. inputType
атрибут inputType
, мы можем облегчить ввод различных типов информации, таких как номера телефонов и пароли:
<EditText
...
android:inputType="phone">
</EditText>
Наиболее распространенные типы входных данных включают:
Тип | Описание |
---|---|
textUri | Текст, который будет использоваться как URI |
textEmailAddress | Текст, который будет использоваться в качестве адреса электронной почты |
textPersonName | Текст, который является именем человека |
textPassword | Текст, который является паролем, который должен быть закрыт |
число | Только числовое поле |
Телефон | Для ввода номера телефона |
Дата | Для ввода даты |
время | Для ввода времени |
textMultiLine | Разрешить несколько строк текста в поле |
android:inputType
также позволяет указать некоторые поведения клавиатуры, например, использовать ли все новые слова или использовать такие функции, как автозаполнение и орфографические предложения.
Вот некоторые из общих значений типа ввода, которые определяют поведение клавиатуры:
Тип | Описание |
---|---|
textCapSentences | Обычная текстовая клавиатура, которая заглавная буква для каждого нового предложения |
textCapWords | Обычная текстовая клавиатура, которая заглаживает каждое слово. Хорошо подходит для названий или имен людей |
textAutoCorrect | Обычная текстовая клавиатура, которая исправляет часто ошибочные слова |
Вы можете установить несколько атрибутов inputType
если это необходимо (в inputType
«|»).
Пример:
<EditText
android:id="@+id/postal_address"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/postal_address_hint"
android:inputType="textPostalAddress|
textCapWords|
textNoSuggestions" />
Вы можете просмотреть список всех доступных типов входных здесь .
атрибут `inputype`
атрибут inputype
в inputype
EditText
: (проверен на Android 4.4.3 и 2.3.3)
<EditText android:id="@+id/et_test" android:inputType="?????"/>
textLongMessage = Клавиатура: алфавит / значение по умолчанию. Введите кнопку: Отправить / Далее. Эмоция: да. Корпус: строчный. Предложение: да. Добавлять. обугливается: и. и все
textFilter = Клавиатура: алфавит / по умолчанию. Введите кнопку: Отправить / Далее. Эмоция: да. Корпус: строчный. Предложение: нет . Добавлять. обугливается: и. и все
textCapWords = Клавиатура: алфавит / значение по умолчанию. Введите кнопку: Отправить / Далее. Эмоция: да. Случай: Случай верблюда . Предложение: да. Добавлять. обугливается: и. и все
textCapSentences = Клавиатура: алфавит / значение по умолчанию. Введите кнопку: Отправить / Далее. Эмоция: да. Случай: случай предложения . Предложение: да. Добавлять. обугливается: и. и все
time = Клавиатура: числовая. Введите кнопку: Отправить / Далее. Эмоции: нет. Случай: -. Предложение: нет . Добавлять. символы::
textMultiLine = Клавиатура: алфавит / значение по умолчанию. Введите кнопку: nextline . Эмоция: да. Корпус: строчный. Предложение: да. Добавлять. обугливается: и. и все
number = Клавиатура: числовая . Введите кнопку: Отправить / Далее. Эмоции: нет. Случай: -. Предложение: нет. Добавлять. символы: ничего
textEmailAddress = Клавиатура: алфавит / значение по умолчанию. Введите кнопку: Отправить / Далее. Эмоции: нет . Корпус: строчный. Предложение: нет . Добавлять. символы: @ и . и все
(Нет типа) = Клавиатура: алфавит / по умолчанию. Введите кнопку: nextline . Эмоция: да. Корпус: строчный. Предложение: да. Добавлять. обугливается: и. и все
textPassword = Клавиатура: алфавит / значение по умолчанию. Введите кнопку: Отправить / Далее. Эмоции: нет. Корпус: строчный. Предложение: нет . Добавлять. обугливается: и. и все
text = Клавиатура: Клавиатура: алфавит / по умолчанию. Введите кнопку: Отправить / Далее. Эмоция: да. Корпус: строчный. Предложение: да. Добавлять. обугливается: и. и все
textShortMessage = Клавиатура: алфавит / значение по умолчанию. Введите кнопку: эмоции . Эмоция: да. Корпус: строчный. Предложение: да. Добавлять. обугливается: и. и все
textUri = Клавиатура: алфавит / значение по умолчанию. Введите кнопку: Отправить / Далее. Эмоции: нет. Корпус: строчный. Предложение: нет . Добавлять. символы: / и . и все
textCapCharacters = Клавиатура: алфавит / по умолчанию. Введите кнопку: Отправить / Далее. Эмоция: да. Случай: ВЕРХНИЙ . Предложение: да. Добавлять. обугливается: и. и все
phone = Клавиатура: числовая . Введите кнопку: Отправить / Далее. Эмоции: нет. Случай: -. Предложение: нет . Добавлять. chars: *** #. - / () WPN, + **
textPersonName = Клавиатура: алфавит / значение по умолчанию. Введите кнопку: Отправить / Далее. Эмоция: да. Корпус: строчный. Предложение: да. Добавлять. обугливается: и. и все
Примечание. Auto-capitalization
изменяет поведение по умолчанию.
Примечание 2: На Numeric keyboard
ВСЕ номера указаны на английском языке 1234567890.
Примечание 3: Настройка Correction/Suggestion
изменит поведение по умолчанию.
Скрытие SoftKeyboard
Скрытие Softkeyboard является основным требованием, обычно при работе с EditText. По умолчанию программная клавиатура может быть закрыта только нажатием кнопки «Назад», поэтому большинство разработчиков используют InputMethodManager, чтобы заставить Android скрыть виртуальную клавиатуру, вызывающую hideSoftInputFromWindow, и передать в токене окна, содержащего ваше сфокусированное представление. Код, чтобы сделать следующее:
public void hideSoftKeyboard()
{
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
Код является прямым, но возникают другие серьезные проблемы, связанные с тем, что функция hide должна вызываться при возникновении какого-либо события. Что делать, если вам нужна Softkeyboard, скрытая при нажатии в любом месте, кроме вашего EditText? Следующий код дает аккуратную функцию, которую нужно вызвать в методе onCreate () только один раз.
public void setupUI(View view)
{
String s = "inside";
//Set up touch listener for non-text box views to hide keyboard.
if (!(view instanceof EditText)) {
view.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
hideSoftKeyboard();
return false;
}
});
}
//If a layout container, iterate over children and seed recursion.
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View innerView = ((ViewGroup) view).getChildAt(i);
setupUI(innerView);
}
}
}
Значок или кнопка внутри Custom Edit Text и его действие и нажмите кнопку прослушивания.
Этот пример поможет редактировать текст с помощью значка в правой части.
Примечание: в этом я использую setCompoundDrawablesWithIntrinsicBounds, поэтому, если вы хотите изменить положение значка, вы можете достичь этого, используя setCompoundDrawablesWithIntrinsicBounds в setIcon.
public class MKEditText extends AppCompatEditText {
public interface IconClickListener {
public void onClick();
}
private IconClickListener mIconClickListener;
private static final String TAG = MKEditText.class.getSimpleName();
private final int EXTRA_TOUCH_AREA = 50;
private Drawable mDrawable;
private boolean touchDown;
public MKEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public MKEditText(Context context) {
super(context);
}
public MKEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void showRightIcon() {
mDrawable = ContextCompat.getDrawable(getContext(), R.drawable.ic_android_black_24dp);
setIcon();
}
public void setIconClickListener(IconClickListener iconClickListener) {
mIconClickListener = iconClickListener;
}
private void setIcon() {
Drawable[] drawables = getCompoundDrawables();
setCompoundDrawablesWithIntrinsicBounds(drawables[0], drawables[1], mDrawable, drawables[3]);
setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
setSelection(getText().length());
}
@Override
public boolean onTouchEvent(MotionEvent event) {
final int right = getRight();
final int drawableSize = getCompoundPaddingRight();
final int x = (int) event.getX();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (x + EXTRA_TOUCH_AREA >= right - drawableSize && x <= right + EXTRA_TOUCH_AREA) {
touchDown = true;
return true;
}
break;
case MotionEvent.ACTION_UP:
if (x + EXTRA_TOUCH_AREA >= right - drawableSize && x <= right + EXTRA_TOUCH_AREA && touchDown) {
touchDown = false;
if (mIconClickListener != null) {
mIconClickListener.onClick();
}
return true;
}
touchDown = false;
break;
}
return super.onTouchEvent(event);
}
}
Если вы хотите изменить сенсорную область, вы можете изменить значения EXTRA_TOUCH_AREA по умолчанию, которые я дал как 50.
И для параметра «Включить кнопку» и «прослушиватель кликов» вы можете позвонить из своей деятельности или фрагмента, как это,
MKEditText mkEditText = (MKEditText) findViewById(R.id.password);
mkEditText.showRightIcon();
mkEditText.setIconClickListener(new MKEditText.IconClickListener() {
@Override
public void onClick() {
// You can do action here for the icon.
}
});