2016-06-02 3 views
2

Я пытаюсь изменить цвет подчеркивания 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"/> 

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

Screenshot

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

ответ

5

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

<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.

+0

спасибо, ваш ответ совершенен. –

1

Вы должны удалить родительский атрибут. Это вызвано только устройством API 23.

<style name="MyTheme.EditText"> 
    <item name="colorControlActivated">@color/green</item> 
</style> 
0

У меня была та же проблема.

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

Но у меня также был переработанный синий удар. 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! Вы подтолкнули меня к идее «удалить родителя».

Смежные вопросы