EditText с пользовательской темой показывает подчеркивание под маркером выбора

я пытаюсь изменить цвет подчеркивания EditText, применяя тему.

Стиль:

<style name="MyTheme.EditText" parent="Widget.AppCompat.EditText">
    <item name="colorControlActivated">@color/green</item>
</style>

Редактировать текст:

<EditText
    android:id="@+id/editText_amount"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/hint_enter_amount"
    android:theme="@style/MyTheme.EditText"/>

В основном это работает, но когда я пытаюсь выбрать или переместить курсор, ручка выделения также подчеркивается. Вы можете увидеть это на скриншоте.

Кто-нибудь знает, как это исправить?

Ответы на вопрос(3)

ойства.

<style name="MyTheme.EditText">
    <item name="colorControlActivated">@color/green</item>
</style>
Решение Вопроса

Вы можете использовать этот стиль как

<EditText 
   style="@style/MyTheme.EditText"/>

Или вы можете отделить вашу тему для ссылки на атрибут editTextStyle.

<style name="MyEditTextStyle" parent="Widget.AppCompat.EditText">
    <item name="colorControlActivated">@color/green</item>
</style>

<style name="MyTheme.EditText">
    <item name="editTextStyle">@style/MyEditTextStyle</item>
</style>

<EditText
    android:theme="@style/MyTheme.EditText"/>

Хорошо, но откуда эти подчеркивания?

android:theme является атрибутом View и когда вы устанавливаете стиль какandroid:themeэтот стиль будет обернут в ContextThemeWrapper с контекстной темой, пока он находится в режиме просмотра.

Так что это означает, что если вы установитеandroid:theme свойство со стилем, который содержитandroid:background предмет как

<item name="android:background">@color/green</item>

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

"Widget.AppCompat.EditText" это стиль и ссылки?attr/editTextBackground как"android:background", А в файле v21 / values-21.xml@drawable/abc_edit_text_material определяется какeditTextBackground.

Итак, для вашего примера,@drawable/abc_edit_text_material становится фоном вашего EditText и SelectionHandlers.

Мой макет показывает текст редактирования внутри синей рамки. Там я хотел иметь белый текст и белое подчеркивание и белый элемент управления выделением. Я установил все в моей AppTheme. Все хорошо!

Но я также имел Recyclerview взорвать синюю коробку. RecyclerView имеет белые карточки, которые содержат Edittext. Белый текст, подчеркивание и контроль не имеют смысла в белых карточках. :)

Поэтому я попытался изменить цвет текста, подчеркивания и элементов управления на темно-серый. Но безуспешно. У меня были те же проблемы с контролем, как в этом вопросе.

Я пытался использовать решенный ответ, но это не помогло мне. Может быть, моя вина, не знаю.

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

Внутри styles.xml я добавил:

<style name="RecyclerEditText">
    <item name="colorAccent">@color/darkGray</item>
    <item name="colorControlNormal">@color/darkGray</item>
    <item name="colorControlActivated">@color/darkGray</item>
</style>

и в макете XML я добавил внутри edittext:

android:textColor="@color/darkGray"
android:textColorHint="@color/darkGray"
android:theme="@style/RecyclerEditText"

-

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

Большое спасибо @litmon! Вы подтолкнули меня к идее «удалить родителя».

Ваш ответ на вопрос