Подтвердить что ты не робот

Как настроить цвет курсора 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 кажется странным, его курсор и нижняя строка отображают белый цвет и передают цвет акцента быстро, как с этим бороться? Я хочу, чтобы курсор и нижняя строка оставались белыми.

4b9b3361

Ответ 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 и выше.