2015-01-01 23 views
20

SearchViewとandroid.support.v7.widget.SearchViewとAppThemeは以下のとおりです。AppCompatでSearchViewのカーソル色をスタイルする方法

<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の色がおかしいと思われる、そのカーソルと一番下の行は、それに対処する方法を、すぐに白とアクセントカラーにトランス示しましたか?カーソルとボトムラインを白くしたい。

+0

[ActionBarSherlockを使用せずにSearchViewでカーソルの色を変更する](http://stackoverflow.com/questions/18705185/changing-the-cursor-color-in-searchview-without-actionbarsherlock) – Sufian

+0

[この回答] (http://stackoverflow.com/a/19796417/1276636)私のためのトリックでした。 – Sufian

答えて

37

実験の後、最終的にautoCompleteTextViewStyle属性とカスタムカーソルDrawableを使用してカーソルの色を変更することができました。この例で提供したコードを変更すると、次のようなことが起こります。まず、次のようにあなたのメインテーマに、前述の属性を追加します。

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

<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」のスタイルを作成します行うには

最終的なことは、交換用のカーソルとして使用されるカーソルの描画可能(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

を探しますあなたのの適切なフィールドを変更することによって、常に新しいカーソルの幅と色を変更することができます:

<!-- Change this to increase the width --> 
<size android:width="1dp"/> 
<!-- Change this to change the color --> 
<solid android:color="#FFFFFF" /> 
+4

このコードは無効です。 @ drawable/cursor で十分です – Rahul

+0

これはGoogleでも推奨されている公式のソリューションです。https://code.google.com/ p/android/issues/detail?id = 182516。ありがとう! –

+4

の代わりに ' @ style/cursorColor' {item name = "autoCompleteTextViewStyle"> @ style/cursorColor – user3473445

19

を変更したいすべてが検索の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> 
+4

効率的ではありません。それは多くのUI要素に影響を与えます –

15

は、私は非常に単純colorAccentを追加することでこれを解決しました具体的に私のツールバーのテーマには、私のアプリの残りの部分では、色とは異なっていました。

例えば、

<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" /> 

:私はセットアップにAndroidのテーマを持って、searchviewが含まれている私のツールバー、ため、その後

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

そして:アプリベースのために、私は私がアプリを通じてたい特定のアクセントカラーを持っていますそのツールバーのテーマの中で、私が特にツールバーの(私の場合はカーソルのみです)アクセント付きの要素を着色する別の色のアクセントを使用します。

<style name="ToolbarStyle" parent="@style/ThemeOverlay.AppCompat.ActionBar"> 
    ... 
    <item name="colorAccent">@color/cursorAccent</item> 
</style> 
+0

このソリューションは、あなたがウィジェットにテーマを追加することはできません。 Androidのドキュメントから取得:https://developer.android.com/guide/topics/ui/themes.html – Nativ

+0

@Nativご返信ありがとうございます。彼らがAppCompat v21をリリースしたとき、Googleは具体的にどのようにブログの投稿にサポートツールバーをテーマ化するかを説明しました。それは同じテーマのアプローチを使用します。 http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html。それは、元の質問がSearchViewについて具体的に質問していたことを認めています。この回答は、ツールバー内のSearchViewに合わせて調整されています(スタンドアロンのSearchViewで動作するかもしれませんが、しかし、ブログ記事では、「ウィジェットにテーマを追加できない」ガイドラインが必ずしも真実ではないことが示唆されています。 – tabjsina

+0

素晴らしい説明をいただきありがとうございます。 Androidはときどき混乱する可能性があります – Nativ

1

私はそれを解決する方法。

マイ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のためと上記の。

関連する問題