Как настроить цвет курсора SearchView в AppCompat
My SearchView - это android.support.v7.widget.SearchView и AppTheme показаны ниже.
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/color_accent</item>
</style>
<style name="AppTheme" parent="AppBaseTheme">
</style>
Цвет SearchView кажется странным, его курсор и нижняя строка отображают белый цвет и передают цвет акцента быстро, как с этим бороться? Я хочу, чтобы курсор и нижняя строка оставались белыми.
Ответы
Ответ 1
После многих экспериментов я наконец смог изменить цвет курсора, используя атрибут autoCompleteTextViewStyle
, а также пользовательский курсор Drawable
. Изменив код, который вы указали в примере, вы сделали бы что-то вроде следующего. Во-первых, вы добавляете вышеупомянутый атрибут к своей основной теме следующим образом:
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/color_accent</item>
<item name="autoCompleteTextViewStyle">@style/cursorColor</item>
</style>
Затем вы создаете стиль для "cursorColor", который будет ссылаться на курсор Drawable
, который вы создадите (следующий шаг):
<style name="cursorColor" parent="Widget.AppCompat.AutoCompleteTextView">
<item name="android:textCursorDrawable">@drawable/cursor</item>
</style>
Последнее, что нужно сделать, - создать курсор drawable (cursor.xml), который будет использоваться в качестве замещающего курсора:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#FFFFFF" />
<size android:width="1dp" />
</shape>
Вот как выглядит курсор перед и после применения новой темы, соответственно...
До
![enter image description here]()
После
![enter image description here]()
В качестве последней заметки вы всегда можете изменить ширину и цвет нового курсора, изменив соответствующие поля в Drawable
:
<!-- Change this to increase the width -->
<size android:width="1dp"/>
<!-- Change this to change the color -->
<solid android:color="#FFFFFF" />
Ответ 2
Если все, что вы хотите изменить, это цвет курсора/курсора в файле search-editText, вы можете использовать это:
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="actionBarTheme">@style/AppTheme.ActionBarTheme</item>
....
<style name="AppTheme.ActionBarTheme" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="colorControlActivated">#FFffffff</item>
</style>
Ответ 3
Я решил это довольно просто, добавив colorAccent специально к моей теме панели инструментов, которая отличалась от colorAccent в остальной части моего приложения.
например. Для базы приложений у меня есть определенный цвет акцента, который я хочу на протяжении всего приложения:
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/color_accent</item>
</style>
И затем для моей панели инструментов, содержащей поисковый запрос, я настроил тему для Android:
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/toolBarBackgroundColor"
android:theme="@style/ToolbarStyle"
app:popupTheme="@style/ThemeOverlay.AppCompat" />
В этой теме панели инструментов я использую другой цветный акцент, чтобы специально окрасить акцентированные элементы (который является только курсором в моем случае) на панели инструментов:
<style name="ToolbarStyle" parent="@style/ThemeOverlay.AppCompat.ActionBar">
...
<item name="colorAccent">@color/cursorAccent</item>
</style>
Ответ 4
Как я его решил.
Мой SearchView
код:
<android.support.v7.widget.SearchView
android:id="@+id/searchView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/SearchViewStyle"
app:queryHint="@string/action_search"
app:searchIcon="@drawable/ic_search" />
И мой стиль WallSearchView
:
<style name="WallSearchView" parent="Widget.AppCompat.SearchView">
...
<item name="iconifiedByDefault">false</item>
<item name="colorControlActivated">#FFffffff</item>
</style>
** примечание: только для v21 и выше.