私の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の色は奇妙に見えますが、カーソルと一番下の行はすぐに白になり、アクセント色にすばやく変わります。カーソルと一番下の行を白のままにします。
多くの実験の後、カスタムカーソル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>
これは、それぞれ新しいテーマを適用する前と適用した後のカーソルの外観です...
前
後
最後の注意として、Drawable
の適切なフィールドを変更することにより、新しいカーソルの幅と色をいつでも変更できます。
<!-- Change this to increase the width -->
<size Android:width="1dp"/>
<!-- Change this to change the color -->
<solid Android:color="#FFFFFF" />
変更するのが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>
私はツールバーのテーマに具体的に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>
どうやって解決したか。
私の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以降のみ。
この簡単な解決策は私のために働いた:
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" />