Android studio edittext cursor color

Установить цвет курсора EditText

у меня возникла эта проблема, когда я использую тему Холо Android в проекте планшета. Однако, у меня есть фрагмент на экране, который имеет белый фон. Я добавляю EditText компонент на этом фрагменте. Я попытался переопределить тему, установив фон голограммы.Легкие тематические ресурсы. Однако мой текстовый курсор (карат) остается белым и, следовательно, невидимым на экране (я могу заметить его слабо в поле edittext..).

кто-нибудь знает, как я могу получить EditText для использовать более темный цвет курсора? Я попытался установить стиль EditText в «@android:style/Widget.Holo.Light.EditText» без положительного результата.

15 ответов

задание до @null должно привести к использованию android:textColor как цвет курсора.

атрибут «textCursorDrawable» доступен на уровне API 12 и выше

затем создайте drawable xml: color_cursor

у вас есть курсор белого цвета на свойстве EditText.

похоже, что все ответы идут вокруг кустов.

в своем EditText , воспользуйтесь свойством:

и добавить drawable black_cursor.xml к вашим ресурсам, следующим образом:

Это также способ для создания более разнообразных курсоров, если вам нужно.

существует новый способ изменить цвет курсора в latest Appcompact v21
Просто изменить colorAccent в стиле вроде этого:

затем применить этот стиль на тему приложения или деятельности.

обновление: этот способ работает только на API 21+
обновление 2: я не уверен, что минимальная версия android, что она может работать.
протестировано android версии:

Я установил стиль editText темы в:

затем я использовал следующий drawable для установки курсора:

android: textCursorDrawable здесь ключевое.

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

во-первых, создайте курсор drawable:

установите идентификатор ресурса drawable курсора на созданный вами drawable(https://github.com/android/platform_frameworks_base/blob/kitkat-release/core/java/android/widget/TextView.java#L562-564″>source)):

чтобы просто изменить цвет курсора по умолчанию drawable, вы можете использовать следующий метод:

опоздал на вечеринку,вот мой ответ,

это для людей, которые не хотите изменить colorAccent в их родительской теме, но хочет изменить EditText атрибуты!

этот ответ демонстрирует, как изменить .

  1. цвет нижней строки
  2. цвет Курсора
  3. цвет указателя Курсора (я использовал свое собственное изображение). из EditText использование стиля деятельности тема.

пример:

Теперь создайте drawable ( edit_text_background ) добавить xml-ресурс для фона!Вы можете настроить, как вы хотите!

теперь, как вы установили этот стиль в вашей теме деятельности.

пример :

в вашей деятельности у вас есть тема,задайте этот обычай editText темы что.

Источник

Programmer Think

Where programmers share thinking

Android Custom EditText Cursor and Underline Colors

Posted by jmabbate on Sat, 29 Jun 2019 00:39:43 +0200

Recently, when I was writing some little Demo review basics, when I used EditText, I suddenly found that I hardly noticed the color of its cursor and underline before, so I spent a lot of time and read many blogs. Now I will summarize and share the harvest.

1. First impression: native EditText

We need to modify the native EditText, first of all, of course, we need to understand its true face. Create a new project in Android Studio that lets MainActivity inherit from AppCompatActivity (why do we do this, let’s talk about it later), and then place an EditText in the layout of MainActivity:

Operating the project, careful observation can see that the cursor and underline are pink. Now let’s go step by step and change its cursor color first.

2. Custom cursor color

EditText has an attribute: android:textCursorDrawable, which is used to set the cursor style. In order to deepen our understanding, we will do a small experiment first: set textCursorDrawable to @null, which means removing the default style of the system, but we all remember that the attribute of the hidden cursor is android:cursorVisible, so what will the time scale look like? You can set different colors for text (android:textColor) and prompt text (android:textColorHint property), and when running, you will find that the color of the cursor is the same as that of the text.

Читайте также:  Сколько оперативной памяти надо android

After understanding the role of android:textCursorDrawable, we can create a cursor_color.xml file under the drawable resource folder, which reads as follows

The color of the cursor is light blue with a width of 2 dp. Place a new EditText under the native EditText:

The operation results are as follows:

3. EditText after background cancellation

In Section 2, we set the attribute android:textCursorDrawable to «@null» and find that the cursor style will change to the same color as the text. What if we set the background of the entire EditText to «@null»? We can add an EditText and add the attribute android:background=»@null»:

As you can see, although the cursor’s style has not changed, the underline has disappeared, but in addition, EditText’s margin has disappeared. If the cursor is not blinking, it looks like a TextView at first glance.

This is how some custom EditText underscoring tutorials work on the Web. First remove the background, and then add a horizontal line below. This operation is not impossible, but in order to be beautiful, it is necessary to reset the spacing value.

4. Custom Subject Modification Underline

Remember when we created MainActivity, we inherited AppCompatActivity? Here’s the answer. This is done to use the Material Design style in the appcompat-v7 package. For example, we can create a new MyEditText style in the Styles.xml file:

Did you see? The colour Accent inside is the cockroach pink. In order to understand these three colors, I specially found a picture:

6. Customize underscores when inheriting Activity

Previous custom underlining operations are based on the premise of inheriting AppCompat Activity. If you change to Activity and then run on Android phones below 5.0, the effect is as follows:

The Material Design style disappeared and the color of the cursor could be changed, but the color of the underline could not be changed. So we have to think of other ways.

EditText is an input box, which we can understand as follows: Underline is nothing more than adding a line to the lower border of the input box. This can be done with layer-list (layer) in Android. Create two new XML files: et_underline_unselected.xml and et_underline_selected.xml. The former is the background when EditText was selected, and the latter is the background when it was not selected:
et_underline_unselected.xml

I think of layer-list as a list of layers. Shape is an item in the list. Since we only need a horizontal line in the bottom border, we set it to a negative value except for the bottom margin of the list. There should be a little distance between the cursor and the underline, so set the inner margin below the shape to 4dp. Of course, the underline width is a little wider when selected.

Create a new Second Activity in the project, inherit from Activity, and then place two EditText s in the layout file. The background s are set to «@null» and the cursor is in our previous light blue.

Then set EditText’s listening events in the code

Note that all EditText s should be set to run first. The effect is as follows:

The effect is that we implemented it, but then the code in Activity is too lengthy, so we can encapsulate the selected and unselected states into the state selector. Create a new et_underline_selector.xml file under the drawable folder:

android:state_focused indicates whether the control is focused. Then set android:background=»@drawable/et_underline_selector» in the layout file, and delete the focus listening code of Activity. Running, you can see the same effect.

7. Postscript

This is the end of the article, but I still have a lot to learn. Some of the knowledge in the article may be inadequate or wrong because of my personal understanding. Welcome to make corrections!

Читайте также:  Безопасный режим андроид как отключить хонор

Because the code here is relatively simple, the project will not be uploaded, you start knocking, I believe there is no problem.

Источник

Change the cursor color via styling #820

Comments

giangpham96 commented Dec 11, 2019 •

Looks like the TextInputLayout and TextInputEditTextLayout are defaulting the cursor (and cursor bubble) color to primary color. I tested it by switching the global primary color of the app and it works. However, when I try to create a theme for that specific view and override the primary color, it doesn’t work.

Could somebody help with this?

The text was updated successfully, but these errors were encountered:

giangpham96 commented Dec 11, 2019

UPDATE

If I create the style for the TextInputLayout and define the colorControlActivated like

and use theming instead of styling on the TextInputLayout

It suddenly works perfectly. But I don’t really want to use theming because I have to copy that line all over the place while using styling I can simply use @style/Widget.AppTheme.TextInputEditText.Dense

damon-beaven commented Dec 11, 2019

I agree this is a bug and I’ve been looking for a way around it for the past week. I was actually about to finally log a bug when I found your issue already logged. I’ll give your workaround a try. but I completely agree that I shouldn’t have to do it that way.

It might also be important to point out that if an app has existing EditText controls those will use colorAccent while TextInputLayout will use colorPrimary . An app could easily have a mixture of cursor colors. Basically, all legacy Android controls (that I know of) have always used colorAccent for the cursor color. I feel that should be the default for new controls as well.

dsn5ft commented Dec 11, 2019 •

The reason why using android:theme works is because colorControlActivated is a theme attribute, as opposed to a specific component attribute (e.g., hintTextColor ).

One way you could customize a global theme attribute but only have that customization apply to a specific component is to use our materialThemeOverlay functionality. E.g.:

Create a theme overlay that customizes colorControlActivated :

Create a TextInputLayout style that uses the theme overlay:

Set the TextInputLayout style as the default in your app theme:

Источник

EditText

Компонент EditText — это текстовое поле для пользовательского ввода, которое используется, если необходимо редактирование текста. Следует заметить, что EditText является наследником TextView.

В Android Studio на панели инструментов текстовые поля можно найти в категории Texts под разными именами.

Для быстрой разработки текстовые поля снабдили различными свойствами и дали разные имена: Plain Text, Person Name, Password, Password (Numeric), E-mail, Phone, Postal Address, Multiline Text, Time, Date, Number, Number (Signed), NumberDecimal.

Plain Text

Plain Text — самый простой вариант текстового поля без наворотов. При добавлении в разметку его XML-представление будет следующим:

Person Name

При использовании элемента Person Name в XML добавляется атрибут inputType, который отвечает за вид клавиатуры (только буквы) при вводе текста.

Password и Password (Numeric)

При использовании Password в inputType используется значение textPassword. При вводе текста сначала показывается символ, который заменяется на звёздочку. Если используется элемент Password (Numeric), то у атрибута inputType используется значение numberPassword. В этом случае на клавиатуре будут только цифры вместо букв. Вот и вся разница.

E-mail

У элемента E-mail используется атрибут android:inputType=»textEmailAddress». В этом случае на клавиатуре появляется дополнительная клавиша с символом @, который обязательно используется в любом электронном адресе.

Phone

У элемента Phone используется атрибут android:inputType=»phone». Клавиатура похожа на клавиатуру из старого кнопочного сотового телефона с цифрами, а также с кнопками звёздочки и решётки.

Postal Address

Multiline Text

У Multiline Text используется атрибут android:inputType=»textMultiLine» позволяющий сделать текстовое поле многострочным. Дополнительно можете установить свойство Lines (атрибут android:lines), чтобы указать количество видимых строк на экране.

Time и Date

Атрибут android:inputType=»time» или android:inputType=»date». На клавиатуре цифры, точка, запятая, тире.

Number, Number (Signed), Number (Decimal)

Атрибут android:inputType=»number» или numberSigned или numberDecimal. На клавиатуре только цифры и некоторые другие символы.

Текст-подсказка

Веб-мастера знают о таком атрибуте HTML5 как placeholder, когда в текстовом поле выводится строчка-подсказка приглушенным (обычно серым цветом). Живой пример приведён ниже.

Читайте также:  Как изменить звук уведомления андроид

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

В Android у многих элементов есть свойство Hint (атрибут hint), который работает аналогичным образом. Установите у данного свойства нужный текст и у вас появится текстовое поле с подсказкой.

Запускаем приложение и видим подсказку, которая исчезает при попытке ввести текст.

Вызов нужной клавиатуры

Не во всех случаях нужна стандартная клавиатура с буковками и цифрами. Если вы пишете калькулятор, то проще показать пользователю цифровую клавиатуру. А если нужно ввести электронный адрес, то удобнее показать клавиатуру, где уже есть символ @. Ну а если ваше приложение пишется для котов, то достаточно вывести только те буквы, из которых можно составить слова Мяу и Жрать давай (к сожалению, такой клавиатуры ещё нет, но Google работает в этом направлении).

У элемента EditText на этот случай есть атрибут inputType:

В данном случае с атрибутом inputType=»textCapWords&quot каждый первый символ каждого слова при вводе текста автоматически будет преобразовываться в прописную. Удобно, не так ли?

Значение textCapSentences делает прописным каждый первый символ предложения.

Если вам нужен режим CapsLock, то используйте значение textCapCharacters и все буквы сразу будут большими при наборе.

Для набора телефонного номера используйте phone, и тогда вам будут доступны только цифры, звёздочка (*), решётка (#).

Для ввода веб-адресов удобно использовать значение textUri. В этом случае у вас появится дополнительная кнопочка .com (при долгом нажатии на нее появятся альтернативные варианты .net, .org и др.).

Вот вам целый список доступных значений (иногда различия очень трудно различимы)

Интерфейс InputType

Кроме использования атрибута android:inputType мы можем добиться нужного поведения от текста при помощи интерфейса InputType.

Атрибут android:imeOptions — параметры для текущего метода ввода

У текстовых полей есть атрибут android:imeOptions, с помощью которого настраиваются параметры для текущего метода ввода. Например, когда EditText получает фокус и отображается виртуальная клавиатура, эта клавиатура содержит кнопку «Next» (Далее), если атрибут android:imeOptions содержит значение actionNext. Если пользователь касается этой кнопки, фокус перемещается к следующему компоненту, который принимает пользовательский ввод. Если компонент EditText получает фокус и на виртуальной клавиатуре появляется кнопка «Done» (Готово), значит использовался атрибут android:imeOptions со значением actionDone. Как только пользователь касается этой кнопки, система скрывает виртуальную клавиатуру.

Заблокировать текстовое поле

Для блокировки текстового поля присвойте значения false свойствам Focusable, Long clickable и Cursor visible.

Другие свойства

Методы

Основной метод класса EditTextgetText(), который возвращает текст, содержащийся в текстовом поле. Возвращаемое значение имеет специальный тип Editable, а не String.

Соответственно, для установки текста используется метод setText().

В Kotlin может возникнуть проблема, если программист захочет использовать конструкцию присвоения через свойство.

Большинство методов для работы с текстом унаследованы от базового класса TextView: setTypeface(null, Typeface), setTextSize(int textSize), SetTextColor(int Color).

Выделение текста

У EditText есть специальные методы для выделения текста:

  • selectAll() — выделяет весь текст;
  • setSelection(int start, int stop) — выделяет участок текста с позиции start до позиции stop;
  • setSelection(int index) — перемещает курсор на позицию index;

Предположим, нам нужно выделить популярное слово из трёх букв в большом слове (это слово «кот», а вы что подумали?).

Ещё есть метод setSelectAllOnFocus(), который позволяет выделить весь текст при получении фокуса.

Обработка нажатий клавиш

Для обработки нажатий клавиш необходимо зарегистрировать обработчик View.OnKeyListener, используя метод setOnKeyListener() элемента EditText. Например, для прослушивания события нажатия клавиши Enter во время ввода текста пользователем (или котом), используйте следующий код:

Пустой ли EditText

Чтобы проверить, пустой ли EditText, можно воспользоваться кодом:

Также можно проверять длину текста, если она равно 0, значит текст пуст.

Превращаем EditText в TextView

Практического смысла тут нет, но для общего развития превратим текстовое поле в текстовую метку. Для этого нужно сделать компонент недоступным, убрать курсор, установить прозрачный фон и отключить слушатель нажатий клавиш.

Также можно установить эти свойства через XML, кроме последнего пункта.

Дополнительное чтение

Beware EditText on API 21 — разница между версиями 21 и 22

Источник

Оцените статью