Як змінити колір лінії в EditText


203

Я створюю EditText у моєму файлі xml-макета

Але я хочу змінити кольорову лінію в EditText з Holo на (наприклад) червону. Як це можна зробити?

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

Відповіді:


310

Це найкращий інструмент, який ви можете використовувати для всіх поглядів та його БЕЗКОШТОВНО завдяки завдяки @ Jérôme Van Der Linden .

Генератор кольорів Android Holo дозволяє легко створювати компоненти для Android, такі як EditTextабо спінер, за допомогою власних кольорів для програми Android. Він створить усі необхідні дев'ять патч-ресурсів, а також пов'язані з ними XML-графіки та стилі, які ви можете скопіювати прямо у ваш проект.

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

ОНОВЛЕННЯ 1

Здається, цей домен минув, але проект є відкритим кодом, який ви можете знайти тут

https://github.com/jeromevdl/android-holo-colors

Спробуй це

це зображення поставлено на задньому плані EditText

android:background="@drawable/textfield_activated"

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


ОНОВЛЕННЯ 2

Для API 21 або новішої версії ви можете використовувати android:backgroundTint

<EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Underline color change"
        android:backgroundTint="@android:color/holo_red_light" />

Оновлення 3 Зараз у нас є підтримка ззадуAppCompatEditText

Примітка: нам потрібно використовувати додаток: backgroundTint замість android: backgroundTint

<android.support.v7.widget.AppCompatEditText
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:hint="Underline color change"
    app:backgroundTint="@color/blue_gray_light" />

Посилання здається мертвою? Програмне забезпечення все ще доступне?
Кодування Івана

1
@CodingJohn цей проект є відкритим джерелом ви можете знайти тут github.com/jeromevdl/android-holo-colors
MilapTank

і хто говорить, що ми повинні використовувати "app: backgroundTint замість android: backgroundTint" ??
user924

якщо ви хочете зворотну сумісність, ви можете використовувати додаток: *** OW android: ***
MilapTank

202

Мені не подобаються попередні відповіді. Найкращим рішенням є використання:

<android.support.v7.widget.AppCompatEditText

      app:backgroundTint="@color/blue_gray_light" />

android:backgroundTintдля EditTextроботи лише на API21 + . Через це ми маємо використовувати бібліотеку підтримки та AppCompatEditText.

Примітка: ми маємо використовувати app:backgroundTintзамість цьогоandroid:backgroundTint

Версія AndroidX

<androidx.appcompat.widget.AppCompatEditText

      app:backgroundTint="@color/blue_gray_light" />

3
Це найкраще рішення! Простий і працює на всіх рівнях API. Дякую!
Іво Стоянов

7
вам цього не потрібно, якщо ви використовуєте бібліотеку appcompat EdtiTexts автоматично перетворюються в AppCompatEditText і застосовується фоновий відтінок.
стефан к.

Я думаю, це має бути саме рішенням
Чт Нгуен

Велике спасибі. Він працював для API 16+. Найкраще рішення.
Андре Луїз Рейс

2
можна налаштувати додаток: backgroundTint програмно? Я міг знайти метод 'setBackgroundTint'
Сарат Нагеш,

75

Ви також можете швидко змінити колір підкреслення EditText, відтіняючи фон EditText так:

<EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Something or Other"
            android:backgroundTint="@android:color/holo_green_light" />

18
Працює лише в API 21 або новішої версії. Будь-який спосіб зробити цю роботу на менший рівень API?
Вучко

Перевірте REVERSE рішення stackoverflow.com/questions/26574328 / ...
powder366

@ mladj0ni Cool, + 1d
Вучко

3
Для менших рівнів API, використовуйте тільки "backgroundTint" замість "Android: backgroundTint" Кредити stackoverflow.com/a/29400711/1590911
Hasaan Ali

це змінює весь колір фону, а не колір лінії
Code Wiget

29

для API нижче 21, ви можете використовувати атрибут теми в EditText коді, розміщеному нижче, у файлі стилю

<style name="MyEditTextTheme">
    <item name="colorControlNormal">#FFFFFF</item>
    <item name="colorControlActivated">#FFFFFF</item>
    <item name="colorControlHighlight">#FFFFFF</item>
</style>

використовувати цей стиль в EditTextякості

<EditText
    android:id="@+id/etPassword"
    android:layout_width="match_parent"
    android:layout_height="@dimen/user_input_field_height"
    android:layout_marginTop="40dp"
    android:hint="@string/password_hint"
    android:theme="@style/MyEditTextTheme"
    android:singleLine="true" />

чи знаєте ви, як додати альфа / непрозорість до файлу стилів? Як би він мав звичайний колір із непрозорістю, і як тільки вони почнуть набирати текст, він повинен прийняти активований або виділений колір
ASN

1
@ANS для цього вам потрібно додати слухача текстового спостереження і динамічно встановити непрозорість методу "onTextChanged"
Рахул

ой. Тож його не можна додати до файлу стилізації чи вибору, і це слід робити динамічно?
ASN

Непрозорість @ASN додається у шістнадцятковому кольорі i перші два символи 00-FF, наприклад: # A1FAFAFA
aimiliano

21

Програмно можна спробувати:

editText.getBackground().mutate().setColorFilter(getResources().getColor(android.R.color.holo_red_light), PorterDuff.Mode.SRC_ATOP);

2
Найкраща відповідь на ефект
Xamarin.Forms

11

я думаю, що найкращий спосіб - за темами:

<style name="MyEditTextTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorControlNormal">@color/black</item>
        <item name="colorControlActivated">@color/action_blue</item>
        <item name="colorControlHighlight">@color/action_blue</item>
</style>

<style name="AddressBookStyle" parent="Theme.AppCompat.Light.DarkActionBar">
     <item name="android:layout_width">match_parent</item>
     <item name="android:layout_height">wrap_content</item>
     <item name="android:textSize">13sp</item>
     <item name="android:theme">@style/MyEditTextTheme</item>
</style>

<android.support.v7.widget.AppCompatEditText
            style="@style/AddressBookStyle"/>

2
це не працює для мене з тегом стилю, але з android: тег теми
aimiliano

9

Щоб змінити колір підкреслення Edittext:

Якщо ви хочете, щоб весь додаток поділяв цей стиль, тоді ви можете зробити наступний спосіб.

(1) перейдіть у файл styles.xml. Ваша AppTheme, яка успадковує батьківську програму Theme.AppCompat.Light.DarkActionBar (у моєму випадку) буде базовим батьківським для всіх файлів стилів у вашому додатку. Змініть його назву на "AppBaseTheme". Створіть інший стиль прямо під ним, який має ім’я AppTheme та успадковує від AppBaseTheme, який ви тільки що редагували. Це виглядатиме так:

<!-- Base application theme. -->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="windowActionBar">false</item>
    <!--see http://www.google.com/design/spec/style/color.html#color-color-palette-->
    <item name="colorPrimary">@color/material_brown_500</item>
    <item name="colorPrimaryDark">@color/material_brown_700</item>
    <item name="colorAccent">@color/flamingo</item>

<style name="AppTheme" parent="AppBaseTheme">
    <!-- Customize your theme here. -->
</style>

Потім змініть "colorAccent" на будь-який колір, яким ви бажаєте бути кольором рядка EditText.

(2) Якщо у вас є інші папки значень з style.xml, цей крок дуже важливий. Тому що цей файл успадкує від попереднього батьківського xml-файлу. Наприклад, у мене є значення-19 / styles.xml. Це спеціально для Kitkat та вище. Змініть її батьківську програму на AppBaseTheme і переконайтеся, що вона позбулася "colorAccent", щоб вона не перекривала колір батьків. Також потрібно зберегти елементи, характерні для версії 19. Тоді це буде виглядати приблизно так.

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <item name="android:windowTranslucentStatus">true</item>
    </style>
</resources>

9

Його досить просто (Обов’язково: Мінімальний API 21) ...

  1. Перейдіть до свого xml та виберіть поле EditText
  2. У правій частині ви бачите вікно "Атрибути". Виберіть "Переглянути всі атрибути"
  3. Просто шукайте "відтінок"
  4. І додайте / змініть "backgroundTint" до потрібного шістнадцяткового кольору (скажімо, # FF0000)

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

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

Зберігати кодування ........ :)


2
Мінімальний API 21.
Майхан Ніджат

Зміна відтінку фону змінює передумови. Ця відповідь невірна
Code Wiget

6

Колір лінії визначається EditTextвластивістю фона. Щоб змінити його, слід змінитиandroid:background файл у макеті.

Слід зазначити, що цей стиль досягається за допомогою малювання 9 патчів. Якщо ви подивитесь на SDK, ви побачите, що фоном EditTextцього зображення є:

textfield_activate_holo_light.9.png

Щоб змінити його, ви можете відкрити його в програмі маніпулювання зображенням і пофарбувати його в потрібний колір. Збережіть його як bg_edit_text.9.pngі потім помістіть у папку, що витягується. Тепер ви можете застосувати його як тло для вашого EditTextподібного:

android:background="@drawable/bg_edit_text"


4

Фон віджетів залежить від рівня API .

АЛЬТЕРНАТИВ 1

Ви можете надати користувальницьке зображення для EditTextфону за допомогою

android:background="@drawable/custom_editText"

Ваш образ повинен виглядати приблизно так. Це дасть вам бажаний ефект.

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

АЛЬТЕРНАТИВ 2

Встановіть цей xml у свій EditTextатрибут фону.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
 android:shape="rectangle" android:padding="10dp">
<solid android:color="#4C000000"/>
    <corners android:bottomRightRadius="5dp"
             android:bottomLeftRadius="5dp"
             android:topLeftRadius="5dp"
             android:topRightRadius="5dp"/>
</shape>

Це буде мати однаковий вигляд EditTextу кожному API.


Мене цікавить версія 4.0 і вище. Тобто, я просто хочу змінити колір лінії, коли активний EditText
Alex

4

Можна змінити колір за допомогою тонування фону <EditText android:backgroundTint="@color/red"/>


1
це працює лише для api> 21, ви повинні слідувати відповіді @Rahul для всіх apis або додавати різні макети для api> 21 у папці layout-21
aimiliano

4

dravable / bg_edittext.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@android:color/transparent" />
        </shape>
    </item>

    <item
        android:left="-2dp"
        android:right="-2dp"
        android:top="-2dp">
        <shape>
            <solid android:color="@android:color/transparent" />
            <stroke
                android:width="1dp"
                android:color="@color/colorDivider" />
        </shape>
    </item>
</layer-list>

Встановити EditText

<android.support.v7.widget.AppCompatEditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/bg_edittext"/>

3

Скористайтеся цим методом .. і змініть його відповідно до імен перегляду ур. Цей код чудово працює.

 private boolean validateMobilenumber() {
            if (mobilenumber.getText().toString().trim().isEmpty() || mobilenumber.getText().toString().length() < 10) {
                input_layout_mobilenumber.setErrorEnabled(true);
                input_layout_mobilenumber.setError(getString(R.string.err_msg_mobilenumber));
               // requestFocus(mobilenumber);
                return false;
            } else {
                input_layout_mobilenumber.setError(null);
                input_layout_mobilenumber.setErrorEnabled(false);
                mobilenumber.setBackground(mobilenumber.getBackground().getConstantState().newDrawable());
            }

2

Якщо ви хочете рівну лінію, ви можете це легко зробити з xml. Ось приклад xml:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:top="-1dp"
        android:left="-1dp"
        android:right="-1dp"
        android:bottom="1dp"
        >
        <shape android:shape="rectangle">
            <stroke android:width="1dp" android:color="#6A9A3A"/>
        </shape>
    </item>
</layer-list>

Замініть фігуру селектором, якщо ви хочете надати різну ширину та колір для зосередженого редагування тексту.


1
Матеріальна конструкція створює прямокутник, а ширша нижня лінія
Філіп Зімек

2

Кращий підхід полягає у використанні AppCompatEditTextз backgroundTintатрибутом appпростору імен. тобто

    <android.support.v7.widget.AppCompatEditText
    android:layout_width="match_parent"      
    app:backgroundTint="YOUR COLOR"
    android:layout_height="wrap_content" />

коли ми android:backgroundTintйого використовуємо, він працюватиме лише в API21 або більше, але app:backgroundTintпрацює на всіх рівнях API, які працює у вашому додатку.


1

Використовуйте android: background властивість для цього редакційного тексту. Передайте до нього зображення, які можна намалювати. Наприклад,

android:background="@drawable/abc.png"

1
 <EditText
        android:id="@+id/et_password_tlay"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Password"
        android:textColorHint="#9e9e9e"
        android:backgroundTint="#000"
        android:singleLine="true"
        android:drawableTint="#FF4081"
        android:paddingTop="25dp"
        android:textColor="#000"
        android:paddingBottom="5dp"
        android:inputType="textPassword"/>

    <View
        android:id="@+id/UnderLine"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_below="@+id/et_password_tlay"
        android:layout_centerHorizontal="true"
        android:background="#03f94e" />

** це робити з видом **


1

Спробуйте наступним чином, він перетворить колір нижнього рядка EditText, коли він використовується як фонове властивість.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:left="@dimen/spacing_neg"
        android:right="@dimen/spacing_neg"
        android:top="@dimen/spacing_neg">
        <shape>
            <solid android:color="@android:color/transparent" />
            <stroke
                android:width="@dimen/spacing_1"
                android:color="@android:color/black" />
        </shape>
    </item>
</layer-list>

0

Це можна просто зробити, включивши це android:theme="@style/AppTheme.AppBarOverlayв якості атрибута для свого editText і додати це <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />до своїх стилів

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.