2015-01-01 8 views
20

Meine SearchView ist android.support.v7.widget.SearchView und AppTheme wird unten angezeigt.So formatieren Sie die Cursorfarbe von SearchView unter AppCompat

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

Die Farbe Suche scheint seltsam, zeigten seine Cursor und Unterm Strich weiß und trans-Stellung zur Akzentfarbe schnell, wie man damit umgehen? Ich möchte, dass der Cursor und die untere Zeile weiß bleiben.

+0

möglich Duplikat von [Ändern der Cursorfarbe in SearchView ohne ActionBarSherlock] (http://stackoverflow.com/questions/18705185/changing-the-cursor-color-in-searchview-without-actionbarsherlock) – Sufian

+0

[Diese Antwort] (http://stackoverflow.com/a/19796417/1276636) hat den Trick für mich gemacht. – Sufian

Antwort

37

Nach vielen Experimenten konnte ich schließlich die Cursorfarbe mit dem Attribut autoCompleteTextViewStyle zusammen mit einem benutzerdefinierten Cursor Drawable ändern. Wenn Sie den Code ändern, den Sie im Beispiel angegeben haben, würden Sie Folgendes tun. Zuerst fügen Sie die oben genannte Attribut zu Ihrem Hauptthema wie folgt:

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

Anschließend erstellen Sie den Stil für „cursorColor“, die den Cursor verweisen wird Drawable, die Sie erstellen (nächster Schritt):

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

Das letzte, was zu tun ist, um den Cursor zu ziehbar (cursor.xml) zu erstellen, die als Ersatz Cursor verwendet wird:

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

Dies ist, was t er Cursor sieht aus wie vor und nach dem neuen Thema Anwendung bzw. ...

Vor

enter image description here

Nach

enter image description here

Als abschließende Bemerkung, Sie kann die Breite und Farbe des neuen Cursors immer ändern, indem Sie die entsprechenden Felder in Ihremändern:

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

Dieser Code hat keine Wirkung @ Zeichen/Cursor ist genug – Rahul

+0

Beachten Sie, dass dies die offizielle Lösung ist, die von Google empfohlen wird - siehe https://code.google.com/ p/android/Probleme/Detail? id = 182516. Danke dafür! –

+4

statt ' @ style/cursorColor' 'versuchen zu verwenden @ style/cursorColor' – user3473445

19

Wenn alles, was Sie die Farbe des Cursors/Cursor des Such editText ändern möchten, können Sie diese verwenden:

<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

Kein effizienter Weg. Es hat eine Menge von UI-Element –

15

ich dies ganz einfach gelöst, indem ein colorAccent Hinzufügen speziell zu meinem Symbolleisten-Thema, das anders als die ColorAccent auf den Rest meiner App war.

z. Für die App Basis habe ich eine gewisse Akzentfarbe, die ich in der gesamten App will:

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

Und dann für meine Symbolleiste, die die Suche enthält, ich habe Setup ein Android Thema:

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

innerhalb dieser Symbolleiste Thema, verwende ich eine andere Farbe Akzent, um speziell die akzentuierte Elemente Farbe (die nur der Cursor in meinem Fall ist) in der Symbolleiste:

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

Diese Lösung ist nicht gut, da Sie nicht zu Widgets, nur zu Aktivitäten oder Anwendungen Theme hinzufügen können. Aus der Android-Dokumentation entnommen: https://developer.android.com/guide/topics/ui/themes.html – Nativ

+0

@Nativ Vielen Dank für Ihre Antwort. Bei der Veröffentlichung von AppCompat v21 hat Google speziell beschrieben, wie die Support-Symbolleiste in ihrem Blogpost gestaltet werden kann. Es verwendet den gleichen Themenansatz. http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html. Das heißt, ich bestätige, dass die ursprüngliche Frage speziell nach dem SearchView gefragt wurde, und diese Antwort ist auf SearchView innerhalb der Toolbar zugeschnitten (obwohl es mit einem eigenständigen SearchView funktionieren kann, habe ich nicht versucht). Der Blogpost schlägt jedoch vor, dass die Richtlinie "Sie können Widgets kein Thema hinzufügen" nicht immer richtig ist. – tabjsina

+0

danke für die tolle Erklärung. Android könnte manchmal so verwirrend sein – Nativ

1

Wie ich es gelöst.

Mein SearchView Code:

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

Und mein WallSearchView Stil ist:

<style name="WallSearchView" parent="Widget.AppCompat.SearchView"> 
     ... 
     <item name="iconifiedByDefault">false</item> 
     <item name="colorControlActivated">#FFffffff</item> 
    </style> 

** Anmerkung: es ist nur für v21 und höher.