2015-04-24 8 views
8

Ich habe ein Layout für die Vorschlagszeile definiert, aber nach dem Aktualisieren der AppCompat-Bibliothek auf 22.1 wird das in styles.xml definierte Layout ignoriert.Styling von AppCompat SearchView mit AppCompat 22.1.0 funktioniert nicht

Dies ist meine styles.xml Datei (vereinfacht):

<style name="Theme.Upp" parent="@style/MyApp"> 
    <item name="searchViewStyle">@style/SearchViewStyleMyApp</item> 
</style> 

<style name="SearchViewStyleMyApp" parent="Widget.AppCompat.SearchView"> 
    <!-- Background for the search query section (e.g. EditText) --> 
    <!-- <item name="queryBackground">@android:color/black</item> --> 
    <!-- Background for the actions section (e.g. voice, submit) --> 
    <!-- <item name="submitBackground">...</item> --> 
    <!-- Close button icon --> 
    <!-- <item name="closeIcon">...</item> --> 
    <!-- Search button icon --> 
    <!-- <item name="searchIcon">...</item> --> 
    <!-- Go/commit button icon --> 
    <!-- <item name="goIcon">...</item> --> 
    <!-- Voice search button icon --> 
    <!-- <item name="voiceIcon">...</item> --> 
    <!-- Commit icon shown in the query suggestion row --> 
    <!-- <item name="commitIcon">...</item> --> 
    <!-- Layout for query suggestion rows --> 
    <item name="suggestionRowLayout">@layout/layout_suggestion_entry</item> 
</style> 

Auch wenn ich versuche, die queryBackground zu ändern es nicht funktioniert.

Irgendwelche Ideen warum?

Antwort

18

Nach dem Blick in die neueste Bibliothek Quelle es loooks wie es beabsichtigt war SearchView entsprechen Material Design-Richtlinien, so dass als Ergebnis Standard-Stil ist ohne Unterstreichung und Hinweis-Symbol.

Ihren eigenen Stil anwenden zu können müssen Sie zuerst Ihre SearchView Stil in styles.xml wie folgt definieren:

<style name="SearchViewStyleMyApp" parent="Widget.AppCompat.SearchView"> 
    <!-- Background for the search query section (e.g. EditText) --> 
    <!-- <item name="queryBackground">@android:color/black</item> --> 
    ... 
    <!-- note that this is how you stye your hint icon --> 
    <item name="searchHintIcon">@drawable/ab_icon_search</item> 
</style> 

Dann definieren Sie Ihre ActionBar/Symbolleiste Thema Overlay:

<style name="MyThemeOverlay.ActionBar" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> 
     <item name="searchViewStyle">@style/SearchViewStyleMyApp</item> 
</style> 

Nächster Schritt ist, ToolBar zu Ihrer Layout-Datei wie folgt hinzuzufügen:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="?attr/colorPrimary" 
     android:minHeight="?attr/actionBarSize" 
     app:theme="@style/MyThemeOverlay.ActionBar" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
     android:elevation="4dp" /> 

    <FrameLayout 
     android:id="@+id/content" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

</LinearLayout> 

Letzte st ep ist Ihre Toolbar zu setzen wie ein ActionBar zu handeln:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

    } 
} 

Beachten Sie auch, dass Ihr Thema Theme.AppCompat.NoActionBar

+1

Vielen Dank! Es klappt! –

+0

hi, ich habe das selbe gemacht wie du erwähnt hast, aber trotzdem wird mein Suchstil ignoriert. Irgendeine Idee? –

+0

@Mohammad Imran Sie müssen ** Widget.AppCompat.SearchView ** und nicht ** Widget.AppCompat.SearchView.ActionBar ** erweitern. Wenn das nicht hilft, gibt es irgendwo anders einen Stilfehler. – Tadas

11

zu verlängern hat Wenn Sie nicht Toolbar verwenden, die Art außer Kraft zu setzen ist searchViewStyle unter actionBarTheme:

<style name="AppTheme" parent="Theme.AppCompat.Light"> 
    ... 
    <item name="actionBarTheme">@style/AppActionBarTheme</item> 
</style> 

<style name="AppActionBarTheme" parent="ThemeOverlay.AppCompat.ActionBar"> 
    <item name="searchViewStyle">@style/AppActionBarSearchView</item> 
</style> 

<style name="AppActionBarSearchView" parent="Widget.AppCompat.SearchView.ActionBar"> 
    <item name="queryBackground">@drawable/your_query_background</item> 
    <item name="submitBackground">@drawable/your_submit_background</item> 
    <item name="searchHintIcon">@drawable/your_search_hint_icon</item> 
    <item name="queryHint">your query hint</item> 
</style> 
+1

Es funktioniert nicht mit appcompat 22.1.0. –

+0

Ich kann bestätigen, dass dies mit appcompat 22.1.1 funktioniert – tinsukE

Verwandte Themen