Підтекст EditText під текстом нижче


108

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

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

Я долучив зображення нижче:

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


Це фон для EditText, який доступний на певному рівні api / телефону. Іншими словами, якщо ваша програма працює на іншому телефоні, ви можете побачити інший фон.
Шериф ель Хатиб

створити вам власний фон
редагування тексту

1
Можливе дублювання попередньої нитки. Будь ласка , перевірте це stackoverflow.com/a/4585750/1129468
gokhanakkurt

Використовуйте нижче фрагмент коду та дайте мені знати, працює він чи ні.
InnocentKiller

Відповіді:


90

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

Щоб встановити колір:

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

Щоб видалити колір:

editText.getBackground().clearColorFilter();

Примітка: коли EditText зосереджується на цьому, встановлений вами колір не набуде чинності, натомість він має колір фокусування.

Довідка API:

Малюнок # setColorFilter

Малюнок # clearColorFilter


4
Також працює на Xamarin для Android, у вашому користувальницькому рендерірі OnElementChanged ви можете це зробитиControl.Background.SetColorFilter(Android.Graphics.Color.White, PorterDuff.Mode.SrcIn);
David Conlisk

@DavidConlisk, який Rendererти перекриваєш? Я намагаюся розібратися, як зробити цю роботу на панелі пошуку.
Нік Н.

@NickN. Я використовував це для вибору, тому я перестарав PickerRenderer. Це повинно працювати з тим, що найкраще вам відповідає (теоретично!)
Девід Конліск

1
Я думаю, що це має бути, але проблема може полягати в тому, що SearchBarRendererце не тип EditText. Не можу змусити його працювати.
Нік Н.

85

Використовуйте android:backgroundTint=""у своєму EditTextформаті XML.

AppCompatEditTextТоді для api <21 ви можете використовувати з бібліотеки підтримкиapp:backgroundTint=""


14
Це працює лише в api 21 і вище. немає зворотної підтримки.
Джон Шеллі

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

@JohnShelley див. Мою відповідь нижче , вона працює для попереднього Lollipop і вище.
Суфіан

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 ні, це працює для попереднього Lollipop і навіть вгору. Я тестував його на API 10, і він працює чудово. Будь ласка, вставте повну помилку та місце, де вона відображається.
Суфіан

Focused редагувати текст ще кольору основного кольору для мене, так що я повинен був використовувати цей підхід: stackoverflow.com/a/36543554/2413303
EpicPandaForce

18

Ви можете змінити Підкреслення з EditText кольору з зазначенням його в styles.xml . У тему додатків styles.xml додайте наступне.

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

Як зазначає Ana в розділі коментарів

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

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


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

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

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

з того, що я не розумію, ви можете просто встановити фон
редакційного тексту

Я переглянув усі рішення, які я міг знайти, це був єдиний, який працював для мене з використанням компонентів 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-файл під малюнком.

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>

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


Focused редагувати текст ще кольору основного кольору для мене, так що я повинен був використовувати цей підхід: 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.