Я использую appcompat v7, чтобы получить согласованный вид на Android 5 и менее. Это работает довольно хорошо. Однако я не могу понять, как изменить цвет нижней строки и цвет акцента для EditTexts. Является ли это возможным?
Я попытался определить пользовательский android:editTextStyle
(см. Ниже), но мне удалось изменить только полный цвет фона или цвет текста, но не нижнюю строку и цвет акцента. Есть ли конкретное значение свойства для использования? я должен использовать настраиваемое рисованное изображение через android:background
свойство? нельзя ли указать цвет в гекса?
<style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:editTextStyle">@style/Widget.App.EditText</item>
</style>
<style name="Widget.App.EditText" parent="Widget.AppCompat.EditText">
???
</style>
Согласно источникам API Android 21, EditTexts с материальным дизайном, кажется, используют colorControlActivated
и colorControlNormal
. Поэтому я попытался переопределить эти свойства в предыдущем определении стиля, но это не имеет никакого эффекта. Вероятно, appcompat не использует его. К сожалению, я не могу найти источники для последней версии appcompat с дизайном материала.
AppCompatEditText
, по-видимому.Ответы:
Наконец-то я нашел решение. Она просто состоит из перекрывая значение
colorControlActivated
,colorControlHighlight
иcolorControlNormal
в вашем определении приложения темы и не ваш стиль EditText. Затем подумайте, чтобы использовать эту тему для любой деятельности, которую вы хотите. Ниже приведен пример:источник
android:theme="@style/Theme.App.Base
. Это гарантирует, что стиль также не повлияет на другие виды в ваших макетах, которые вы не хотите изменять.AppCompatActivity
. Это не будет работать, если он наследует отActivity
.Я чувствовал, что для этого нужен ответ на случай, если кто-то захочет изменить только один текст редактирования Я делаю это так:
источник
В то время как решение Laurents правильно, он приходит с некоторыми недостатками , как описано в комментариях , так как не только в нижней строке
EditText
получает тонированные , но кнопка назадToolbar
, иCheckBoxes
т.д. , а также.К счастью ,
v22.1
изappcompat-v7
ввел некоторые новые возможности. Теперь можно назначить конкретную тему только одному представлению. Прямо из журнала изменений :Таким образом, вместо установки желаемого цвета в глобальной теме, мы создаем новую и назначаем ее только для
EditText
.Пример:
источник
colorControlNormal
без префикса android для подкрашивания виджетов используется метод appcompat, а с префиксом он откатывается к системному методу и доступен только на устройствах API 21+.22.2.0
версию AppCompat, но этот трюк не работает :(Это можно изменить в XML с помощью:
Для справочного API> = 21 совместимость используйте:
Для обратной совместимости API <21 используйте:
источник
backgroundTint="@color/blue"
вместоandroid:backgroundTint="@color/blue"
для обратно совместимой поддержкиandroid:backgroundTint="@color/blue"
, используйтеapp:backgroundTint="@color/blue"
для поддержки устройств до Lollipop, спасибо за ваш комментарий!tools:ignore="MissingPrefix"
если красный подчеркивание поп подapp:backgroundTint="<your color>"
Вот решение для API <21 и выше
Надеюсь, это поможет
источник
24.2.1
,25.1.1
,25.2.0
для устройства <21 и> 21 , и он все еще работает. Пожалуйста, проверьте это простое демо drive.google.com/file/d/0B_poNaia6t8kSzU3bDFVazRSSDA/… . Я не знаю, почему этот код не работает для вас, поэтому, пожалуйста, дайте мне знать. спасибоПринятый ответ немного больше для каждого стиля, но самое эффективное, что нужно сделать, это добавить атрибут colorAccent в свой стиль AppTheme следующим образом:
Атрибут colorAccent используется для тонирования виджетов во всем приложении и поэтому должен использоваться для обеспечения согласованности
источник
name="android:colorAccent"
ошибкеЕсли вы используете,
appcompat-v7:22.1.0+
вы можете использовать DrawableCompat, чтобы подкрасить ваши виджетыисточник
Использование:
Это будет поддерживать устройства pre-Lollipop не только +21
источник
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
и это должно сработатьисточник
Одним из быстрых решений вашей проблемы является поиск в yourappspackage / build / промежуточные / exploded-aar / com.android.support / appcompat-v7 / res / drawable / для abc_edit_text_material.xml и копирование этого XML-файла в папку для рисования. Затем вы можете изменить цвет 9 файлов патчей внутри этого селектора, чтобы соответствовать вашим предпочтениям.
источник
Это очень просто, просто добавьте свой
android:backgroundTint
атрибутEditText
.источник
app:backgroundTint="@color/blue"
работает на всех уровнях API .. хотя по какой-то причине он по-прежнемуВот часть исходного кода
TextInputLayout
в библиотеке поддержки дизайна ( ОБНОВЛЕНО для версии 23.2.0 ), которая упрощает изменениеEditText
цвета нижней строки:Кажется, что весь вышеприведенный код становится бесполезным прямо сейчас в 23.2.0, если вы хотите изменить цвет программно.
И если вы хотите поддерживать все платформы, вот мой метод:
источник
Я тоже застрял на этой проблеме слишком долго.
Мне нужно решение, которое работало для версий выше и ниже v21.
Наконец, я обнаружил очень простое, возможно, не идеальное, но эффективное решение: просто установите цвет фона
transparent
в свойствах EditText.Надеюсь, это сэкономит кому-то время.
источник
Для меня я изменил и AppTheme, и значение colors.xml. И colorControlNormal, и colorAccent помогли мне изменить цвет границы EditText. Как и курсор, и "|" когда внутри EditText.
Вот это colors.xml
Я вынул атрибут android: textCursorDrawable для @null, который поместил в стиль editText. Когда я попытался использовать это, цвета не изменились.
источник
Вы можете установить фон редактируемого текста в прямоугольник с минусовой отступом слева, справа и сверху, чтобы добиться этого. Вот пример XML:
Замените фигуру селектором, если вы хотите предоставить другую ширину и цвет для сфокусированного текста редактирования.
источник
В Activit.XML добавьте код
Где
BackgroundTint=color
для вашего желаемого цветаисточник
Я использую этот метод, чтобы изменить цвет линии с помощью PorterDuff, без других доступных для рисования.
источник
Если вы хотите изменить нижнюю строку без использования цветов приложения, используйте эти строки в своей теме:
Я не знаю другого решения.
источник
Я разработал рабочее решение этой проблемы после 2 дней борьбы, нижеприведенное решение идеально подходит для тех, кто хочет поменять только немного текста редактирования, изменить / переключить цвет с помощью кода Java и хочет преодолеть проблемы различного поведения в версиях ОС из-за использования метода setColorFilter ().
Использует в XML
Добавить линии в стиле
код Java для переключения цвета
источник
Я был совершенно сбит с толку этой проблемой. Я пробовал все в этой теме и в других, но что бы я ни делал, я не мог изменить цвет подчеркивания на что-либо, кроме синего по умолчанию.
Я наконец понял, что происходит. Я (неправильно) использовал
android.widget.EditText
при создании нового экземпляра (но остальные мои компоненты были из библиотеки appcompat). Я должен был использоватьandroid.support.v7.widget.AppCompatEditText
. Я заменилnew EditText(this)
на,new AppCompatEditText(this)
и проблема была мгновенно решена. Оказывается, если вы на самом деле используетеAppCompatEditText
, он будет просто соответствоватьaccentColor
вашей теме (как упоминалось в нескольких комментариях выше), и никаких дополнительных настроек не требуется.источник
Это самый простой и эффективный / многократно используемый / работает на всех API-интерфейсах.
Создайте собственный класс EditText следующим образом:
Тогда используйте это так:
источник
Для динамического изменения фона EditText вы можете использовать ColorStateList .
Кредиты: Этот ТАК ответ о ColorStateList потрясающий .
источник
Добавьте
app:backgroundTint
ниже 21 уровня API. В противном случае используйтеandroid:backgroundTint
.Для ниже уровня API 21.
Для уровня выше 21 API.
источник
Пожалуйста, измените этот метод в соответствии с вашими потребностями. Это сработало для меня!
источник