2015-04-24 10 views
8

Zdefiniowałem układ wiersza sugestii, ale po zaktualizowaniu biblioteki AppCompat do 22.1 układ zdefiniowany w pliku styles.xml jest ignorowany.Stylizacja AppCompat SearchView z AppCompat 22.1.0 nie działa

To jest mój plik styles.xml (uproszczony):

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

Nawet jeśli próbuję zmienić queryBackground nie działa.

Jakieś pomysły, dlaczego?

Odpowiedz

18

Po zaglądaniu do najnowszego źródła biblioteki, wygląda to tak, jak miało to na celu stworzenie zgodnych z wytycznymi projektowania materiałów, dlatego domyślnym stylem jest brak podkreślenia i ikona podpowiedzi.

Aby zastosować własny styl najpierw trzeba określić swój styl SearchView w styles.xml tak:

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

Następnie należy zdefiniować swoją ActionBar/Toolbar motyw nakładka:

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

Następny krok jest dodanie paska ToolBar do pliku układu w następujący sposób:

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

Ostatni obrazek EP jest, aby ustawić pasek do działania jak ActionBar:

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

    } 
} 

Należy również zauważyć, że motyw ma przedłużyć Theme.AppCompat.NoActionBar

+1

Wielkie dzięki! To działa! –

+0

Cześć, zrobiłem to samo co wspomniałeś, ale mój styl wyszukiwania jest ignorowany. Każdy pomysł? –

+0

@Mohammad Imran Należy rozszerzyć ** Widget.AppCompat.SearchView ** i nie ** Widget.AppCompat.SearchView.ActionBar **. Jeśli to nie pomoże, to istnieje błąd stylu w innym miejscu. – Tadas

11

Jeśli nie używasz Toolbar, styl przesłonić jest searchViewStyle pod 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

Nie działa z aplikacją appcompat 22.1.0. –

+0

Mogę potwierdzić, że działa to z aplikacją appcompat 22.1.1 – tinsukE

Powiązane problemy