Styling AppCompat SearchView с AppCompat 22.1.0 не работает

Я определил макет для строки предложения, но после обновления библиотеки AppCompat до 22.1 макет, определенный в файле styles.xml, игнорируется.

Это мой файл styles.xml (упрощенный):

<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 (eg EditText) --> <!-- <item name="queryBackground">@android:color/black</item> --> <!-- Background for the actions section (eg 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> 

Даже если я попытаюсь изменить queryBackground, он не работает.

Любые идеи почему?

Solutions Collecting From Web of "Styling AppCompat SearchView с AppCompat 22.1.0 не работает"

Изучив новейший источник библиотеки, он выглядит так, как будто он предназначен для того, чтобы SearchView соответствия SearchView соответствовало, поэтому в качестве результата по умолчанию используется стиль без подчеркивания и подсказки.

Чтобы применить свой собственный стиль, сначала вы должны определить свой стиль SearchView в styles.xml следующим образом:

 <style name="SearchViewStyleMyApp" parent="Widget.AppCompat.SearchView"> <!-- Background for the search query section (eg 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> 

Затем вы определяете оверлей темы ActionBar / Toolbar:

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

Следующий шаг – добавить ToolBar в ваш файл макета следующим образом:

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

Последний шаг – настроить панель инструментов как 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); } } 

Также обратите внимание, что ваша тема должна расширять Theme.AppCompat.NoActionBar

Если вы не используете Toolbar , стиль для переопределения – это searchViewStyle под 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>