Поиск…


Работа с 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.
               
            }
        });


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow