EditText с настраиваемой темой показывает подчеркивание под маркой выделения
Я пытаюсь изменить цвет подчеркивания EditText, применив тему.
Стиль:
<style name="MyTheme.EditText" parent="Widget.AppCompat.EditText">
<item name="colorControlActivated">@color/green</item>
</style>
EditText:
<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"/>
В основном это работает, но когда я пытаюсь выбрать или переместить курсор, выделение также подчеркнуто. Вы можете видеть это на скриншоте.
![Снимок экрана]()
Кто-нибудь знает, как это исправить?
Ответы
Ответ 1
Вы можете использовать этот стиль как
<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
является атрибутом представления и когда вы устанавливаете стиль как 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.
Ответ 2
Вы должны удалить родительский атрибут. Это вызвано только устройством API 23.
<style name="MyTheme.EditText">
<item name="colorControlActivated">@color/green</item>
</style>
Ответ 3
У меня была такая же проблема.
Мой макет показывает Edittext внутри синего квадрата. Там я хотел иметь белый текст и белую подсветку и белый элемент управления.
Я установил все в своем 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!
Вы подтолкнули меня к идее "удалить родителя".