wake-up-neo.com

So gestalten Sie die Cursorfarbe von SearchView unter AppCompat

Meine Suchansicht ist Android.support.v7.widget.SearchView und AppTheme wird unten angezeigt.

<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 von SearchView scheint seltsam zu sein, der Cursor und die untere Zeile zeigten schnell weiß und wurden schnell zur Akzentfarbe. Ich möchte, dass der Cursor und die untere Linie weiß bleiben.

28
GhostFlying

Nach vielen Experimenten konnte ich schließlich die Cursorfarbe mithilfe des autoCompleteTextViewStyle-Attributs 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 das oben genannte Attribut wie folgt zu Ihrem Hauptthema hinzu:

<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", der auf den Cursor Drawable verweist, den Sie erstellen (nächster Schritt):

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

Als letztes müssen Sie den Cursor zeichnen, der als Ersetzungscursor verwendet werden kann (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>

So sieht der Cursor vor und nach dem Anwenden des neuen Designs aus.

Vor

enter image description here

Nach dem

enter image description here

Als letzte Anmerkung können Sie die Breite und Farbe des neuen Cursors jederzeit ändern, indem Sie die entsprechenden Felder in Ihrer Drawable ändern:

<!-- Change this to increase the width -->
<size Android:width="1dp"/>
<!-- Change this to change the color -->
<solid Android:color="#FFFFFF" />
50
Willis

Wenn Sie nur die Farbe des Caret/Cursors von search-editText ändern möchten, können Sie Folgendes 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>
22

Ich habe das ganz einfach gelöst, indem ich ein colorAccent speziell zu meinem Symbolleisten-Design hinzugefügt habe, das sich von dem colorAccent im Rest meiner App unterschied.

z.B. Für die App-Basis habe ich in der App eine bestimmte Akzentfarbe:

<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 habe ich für meine Symbolleiste, die die Suchansicht enthält, ein Android-Design eingerichtet:

<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 dieses Symbolleisten-Themas verwende ich einen anderen Farbakzent, um die Akzentelemente (in meinem Fall nur der Cursor) in der Symbolleiste speziell zu färben:

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

Wie habe 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 lautet:

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

** Anmerkung: nur für Version 21 und höher.

3
Anand Kumar

Diese einfache Lösung hat für mich funktioniert:


1 - Definieren Sie einen Stil in Ihrer Styles.xml-Datei

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

2- Wenden Sie diesen Stil auf Ihre SearchView an

<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" />
1
Jacob Hatwell