web-dev-qa-db-ja.com

AppCompatの下でSearchViewのカーソルの色をスタイルする方法

私の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の色は奇妙に見えますが、カーソルと一番下の行はすぐに白になり、アクセント色にすばやく変わります。カーソルと一番下の行を白のままにします。

33
GhostFlying

多くの実験の後、カスタムカーソル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>

次に、作成するカーソルDrawableを参照する「cursorColor」のスタイルを作成します(次のステップ)。

<style name="cursorColor" parent="Widget.AppCompat.AutoCompleteTextView">
        <item name="Android:textCursorDrawable">@drawable/cursor</item>
</style>

最後に行うことは、置換カーソルとして使用されるカーソルドロアブル(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" />
56
Willis

変更するのが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>
22

私はツールバーのテーマに具体的に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>

次に、searchviewを含むツールバーに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>
21
tabjsina

どうやって解決したか。

私のSearchViewコード:

<Android.support.v7.widget.SearchView
                Android:id="@+id/searchView"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:theme="@style/WallSearchView"
                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以降のみ。

3
Anand Kumar

この簡単な解決策は私のために働いた:


1-Styles.xmlファイルでスタイルを定義します

<style name="WhiteCursorSearchView" parent="Widget.AppCompat.SearchView">
    <item name="colorControlActivated">#FFFFFF</item>
</style>

2-そのスタイルをSearchViewに適用する

<Android.support.v7.widget.SearchView
    Android:id="@+id/search"
    Android:theme="@style/WhiteCursorSearchView"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    app:iconifiedByDefault="false" />
2
Jacob Hatwell