EditText подчеркивание под свойством текста


108

Я хотел бы изменить синий цвет под текстом редактирования, я не знаю, что это за свойство.

Я пробовал использовать для него другой цвет фона, но это не сработало.

Я прикрепил изображение ниже:

введите описание изображения здесь


Это фон для EditText, который доступен на определенном уровне API / телефоне. Другими словами, если ваше приложение работает на другом телефоне, вы можете увидеть другой фон.
Sherif elKhatib

создать собственный фон для
редактирования

1
Возможное дублирование предыдущей темы. Пожалуйста, проверьте это stackoverflow.com/a/4585750/1129468
gokhanakkurt

Используйте приведенный ниже фрагмент кода и сообщите мне, работает он или нет.
InnocentKiller

Ответы:


90

На самом деле довольно легко установить цвет подчеркивания EditText программно (всего одна строка кода).

Чтобы установить цвет:

editText.getBackground().setColorFilter(color, PorterDuff.Mode.SRC_IN);

Чтобы удалить цвет:

editText.getBackground().clearColorFilter();

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

Справочник по API:

Drawable # setColorFilter

Drawable # clearColorFilter


4
Также работает на Xamarin для Android, вы можете сделать это в пользовательском рендерере OnElementChangedControl.Background.SetColorFilter(Android.Graphics.Color.White, PorterDuff.Mode.SrcIn);
Дэвид Конлиск,

@DavidConlisk, что Rendererвы отменяете? Я пытаюсь понять, как заставить это работать для панели поиска.
Ник Н.

@NickN. Я использовал это для средства выбора, поэтому переопределил PickerRenderer. Он должен работать с любым средством визуализации, которое вам подходит лучше всего (теоретически!)
Дэвид Конлиск,

1
Думаю, должно, но проблема в том, что SearchBarRendererэто не типа EditText. Не могу заставить его работать.
Ник Н.

85

Используйте android:backgroundTint=""в своем EditTextXML-макете.

Для api <21 вы можете использовать AppCompatEditTextиз библиотеки поддержки, затемapp:backgroundTint=""


14
В настоящее время это работает только в api 21 и выше. нет обратной поддержки.
Джон Шелли

2
Это, безусловно, самое простое и краткое решение.
Игорь Ганапольский

@JohnShelley см. Мой ответ ниже , он работает для pre-Lollipop и выше.
Sufian

3
android:background="@null"для устройств с api <21.
Хаммад Насир

4
Чтобы этот атрибут работал в API ниже 21, вы должны использовать пространство имен app (xmlns: app = " schemas.android.com/apk/res-auto" ) вместо android.
Андрей К.

38

Вы должны использовать другое фоновое изображение, а не цвет для каждого состояния EditText(фокус, включен, активирован).

http://android-holo-colors.com/

На сайте выше вы можете получить изображения из множества компонентов в теме Holo. Просто выберите «EditText» и нужный цвет. Вы можете увидеть предварительный просмотр внизу страницы.

Загрузите файл .zip и скопируйте и вставьте ресурсы в свой проект (изображения и XML).

если ваш XML называется: apptheme_edit_text_holo_light.xml (или что-то подобное):

  1. Перейдите в свой XML-файл "styles.xml" и добавьте собственный EditTextстиль:

    <style name="EditTextCustomHolo" parent="android:Widget.EditText">
       <item name="android:background">@drawable/apptheme_edit_text_holo_light</item>
       <item name="android:textColor">#ffffff</item>
    </style>
  2. Просто сделайте это в своем EditText:

    <EditText
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       style="@style/EditTextCustomHolo"/>

И все, надеюсь, это вам поможет.


24

Это отлично работает как для старой, так и для новой версии Android (отлично работает даже с API 10!).

Определите этот стиль в своем styles.xml:

<style name="EditText.Login" parent="Widget.AppCompat.EditText">
    <item name="android:textColor">@android:color/white</item>
    <item name="android:textColorHint">@android:color/darker_gray</item>
    <item name="colorAccent">@color/blue</item>
    <item name="colorControlNormal">@color/blue</item>
    <item name="colorControlActivated">@color/blue</item>
</style>

А теперь в вашем XML установите это как тему и стиль ( стиль, который нужно установить textColor, и тему, чтобы установить все остальные вещи):

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="text"
    style="@style/EditText.Login"
    android:theme="@style/EditText.Login"/>

редактировать

Это решение вызывает крошечный сбой пользовательского интерфейса в более новых версиях Android (Lollipop или Marshmallow и далее), маркеры выделения которых подчеркнуты.

Этот вопрос обсуждается в этой ветке . (Я лично не пробовал это решение)


Отличный ответ, спасибо. Использование parent = "Widget.AppCompat.EditText" вместо parent = "android: Widget.EditText" решило мою основную проблему.
cfl

1
Я думаю, вы имеете в виду, что это работает Lollipop (21) и выше, потому что я получаю предупреждения, что это не ниже 21
Марк О'Салливан

@ MarkO'Sullivan нет, это работает для pre-Lollipop и полностью. Я тестировал его на API 10, и он отлично работает. Пожалуйста, вставьте полную ошибку и место, где она отображается.
Суфьян

Текст сфокусированного редактирования по-прежнему имел основной цвет для меня, поэтому мне пришлось использовать такой подход: stackoverflow.com/a/36543554/2413303
EpicPandaForce

18

Вы можете изменить Подчеркивание из EditText цвета с указанием его в styles.xml . В вашей теме приложения styles.xml добавьте следующее.

<item name="android:textColorSecondary">@color/primary_text_color</item> 

Как отметила Ана в разделе комментариев

  <item name="android:colorControlActivated">@color/black</item>

установка этого в стиле темы хорошо работает для изменения цвета подчеркивания текста редактирования.


3
Обратите внимание, что android:textColorSecondaryэто также используется для определения цвета стрелки назад и DrawerLayoutзначка гамбургера в ActionBar.
Бьянка Даничук

7
Я закончил использовать <item name="colorControlNormal">@color/edittext_underline_color</item>вместо textColorSecondary из-за проблемы с раскраской панели навигации.
Бьянка Даничук

14

Итак, вам нужно создать новый файл .xml в папке с возможностью рисования.

В этот файл вставьте этот код:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item
    android:bottom="8dp"
    android:left="-3dp"
    android:right="-3dp"
    android:top="-3dp">
    <shape android:shape="rectangle">
     <stroke
       android:width="1dp"
       android:color="@color/white"/>
     </shape>
   </item>
</layer-list>

И в вашем EditText установите

android:background="@drawable/your_drawable"

Вы можете поиграть со своим рисованным XML, установить углы, отступы и т. Д.


1
это, вероятно, лучшее решение, учитывая, что оно позволяет полностью настраивать EditText, не влияя на другие компоненты в стиле или макете
mutable2112

из того, что я понял, вы можете просто установить белый фон для
edittext

Перебрал все решения, которые смог найти, это было единственное, которое у меня работало с использованием компонентов Android Material.
barney.balazs

9

В своем стиле приложения определите свойство colorAccent . Здесь вы найдете пример

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/action_bar</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/action_bar</item>
</style>


1

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

Создайте новый файл XML в разделе drawable.

abc.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#00000000" />
    <stroke android:width="1dip" android:color="#ffffff" />
</shape>

и добавьте его в качестве фона вашего текста редактирования

android:background="@drawable/abc"

Я упомянул, что пытался установить цвет фона выше. это не сработало.
AndroidEnthusiast

1

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

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <item name="colorControlNormal">#c5c5c5</item>
    <item name="colorControlActivated">#ffe100</item>
    <item name="colorControlHighlight">#ffe100</item>
</style>

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

<style name="TextAppearence.App.TextInputLayout" parent="@android:style/TextAppearance">
<item name="android:textColor">#4ffd04[![enter image description here][1]][1]</item>
</style>

и используйте эту тему в своем макете:

 <android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="20dp"
    app:hintTextAppearance="@style/TextAppearence.App.TextInputLayout">

    <EditText
        android:id="@+id/edtTxtFirstName_CompleteProfileOneActivity"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:capitalize="characters"
        android:hint="User Name"
        android:imeOptions="actionNext"
        android:inputType="text"
        android:singleLine="true"
        android:textColor="@android:color/white" />

</android.support.design.widget.TextInputLayout>

введите описание изображения здесь


Текст сфокусированного редактирования по-прежнему имел основной цвет для меня, поэтому мне пришлось использовать такой подход: stackoverflow.com/a/36543554/2413303
EpicPandaForce

1

Вы можете сделать это с помощью AppCompatEditText и селектора цвета:

            <androidx.appcompat.widget.AppCompatEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:backgroundTint="@color/selector_edittext_underline" />

selector_edittext_underline.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/focused_color" 
          android:state_focused="true" />
    <item android:color="@color/hint_color" />
</selector>

0

Если вам не нужно поддерживать устройства с API <21, используйте backgroundHint в xml, например:

 <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textPersonName"
            android:hint="Task Name"
            android:ems="10"
            android:id="@+id/task_name"
            android:layout_marginBottom="15dp"
            android:textAlignment="center"
            android:textColor="@android:color/white"

            android:textColorLink="@color/blue"
            android:textColorHint="@color/blue"
            android:backgroundTint="@color/lighter_blue" />

Для лучшей поддержки и откатов используйте решение @Akariuz. backgroundHint - наиболее безболезненное решение, но оно не имеет обратной совместимости, исходя из ваших требований.


0

измените colorAccentцвет, который вам нужен, colorAccentи запустите, вы получите результат


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.