it-swarm.com.ru

Стилизация Android-поиска и выпадающего списка на панели действий

В моем приложении у меня есть вид поиска, который отображает предложения поиска. Я хочу, чтобы раскрывающийся список/текст и текст были определенного цвета. В настоящее время единственное изменение, которое я смог сделать, - это цвет текста введенного текста с помощью следующего:

   <style name="MyApp.AutoCompleteTextView" parent="Widget.AppCompat.Light.AutoCompleteTextView">
    <item name="Android:textColor">@color/white</item>
    <item name="Android:textCursorDrawable">@null</item>
    <item name="Android:background">@color/myBackgroundColor</item>
  </style>

В настоящее время приложение отображает результаты поиска вида, как это:

Here is how it currently looks

То, что я хотел бы знать, - как бы я изменил детали, такие как цвет searchHint, выпадающий фон и цвет выпадающего элемента?

Я нацеливаюсь на API 19+

14
Kurian Vithayathil

Поэтому после долгих поисков наиболее близким решением, которое я могу найти, является следующее (благодаря ответу GZ95 !):

SearchView searchView = new SearchView(context);
LinearLayout linearLayout1 = (LinearLayout) searchView.getChildAt(0);
LinearLayout linearLayout2 = (LinearLayout) linearLayout1.getChildAt(2);
LinearLayout linearLayout3 = (LinearLayout) linearLayout2.getChildAt(1);
AutoCompleteTextView autoComplete = (AutoCompleteTextView) linearLayout3.getChildAt(0);
//Set the input text color
autoComplete.setTextColor(Color.WHITE);
// set the hint text color
autoComplete.setHintTextColor(Color.WHITE);
//Some drawable (e.g. from xml)
autoComplete.setDropDownBackgroundResource(R.drawable.drop_down_bg);

Это не самый элегантный, но это сработало для меня. Единственный вопрос, который у меня возник, - как изменить цвет текста предлагаемого элемента. Я могу услышать более оптимальные решения этой проблемы

9
Kurian Vithayathil

В вашем файле styles.xml установите следующее для вашей AppTheme

<style name="AppTheme" parent="AppTheme.Base">
    <!-- Customize your theme here. -->
    <item name="Android:dropDownItemStyle">@style/myDropDownItemStyle</item>
</style>

<style name="myDropDownItemStyle" parent="Widget.AppCompat.DropDownItem.Spinner">
    <item name="Android:textColor">@color/secondary_text_default_material_light</item>
</style>

Это может изменить цвет текста выпадающего элемента. Попробуй.

15
huangming

Вы можете определить следующие стили в файле res/styles.xml, если вы используете Android.support.v7.widget.SearchView. 

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="autoCompleteTextViewStyle">@style/myAutoCompleteTextViewStyle</item>
    <item name="textAppearanceSearchResultTitle">@style/mySearchResult</item>
</style>

<style name="myAutoCompleteTextViewStyle" parent="Widget.AppCompat.Light.AutoCompleteTextView">
    <item name="Android:popupBackground">#ffffff</item>
</style>

<style name="mySearchResult" parent="TextAppearance.AppCompat.SearchResult.Title">
    <item name="Android:textColor">#000000</item>
</style>

Если вы используете SearchView по умолчанию, атрибуты должны быть «Android: autoCompleteTextViewStyle» и «Android: textAppearanceSearchResultTitle». Я написал сообщение с описанием деталей об этом.

8
t-benze

С помощью стилей вы меняете фон выпадающего меню и цвет текста элементов.

<!-- ToolBar -->
<style name="ToolBarStyle" parent="Theme.AppCompat">
    <item name="Android:textColorPrimary">@Android:color/white</item>
    <item name="Android:textColorSecondary">@Android:color/white</item>
    <item name="actionMenuTextColor">@Android:color/white</item>
    <item name="Android:dropDownItemStyle">@style/myDropDownItemStyle</item>
    <item name="Android:dropDownListViewStyle">@style/myDropDownListViewStyle</item>
</style>


<style name="myDropDownItemStyle" parent="Widget.AppCompat.DropDownItem.Spinner">
    <item name="Android:textColor">@color/secondary_text_default_material_light</item>
    <item name="Android:textSize">14dp</item>
</style>

<style name="myDropDownListViewStyle" parent="Widget.AppCompat.ListView.DropDown">
    <item name="Android:background">#FFF</item>
</style>
3
AntPachon

Вы можете определить offertionRowLayout в themes.xml:

<resources>
<style name="AppTheme" parent="AppTheme.Base">
    <item name="searchViewStyle">@style/AppTheme.SearchView</item>
</style>

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/bluegrey_500</item>
    <item name="colorPrimaryDark">@color/bluegrey_900</item>
    <item name="colorAccent">@color/teal_500</item>
    <item name="Android:windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
</style>

<style name="AppTheme.SearchView" parent="Widget.AppCompat.SearchView">
    <!-- The layout for the search view. Be careful. -->
    <!--<item name="layout">...</item>-->
    <!-- Background for the search query section (e.g. EditText) -->
    <!--<item name="queryBackground">@color/bluegrey_400</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">@drawable/abc_ic_voice_search_api_mtrl_alpha</item>-->
    <!-- Commit icon shown in the query suggestion row -->
    <!--<item name="commitIcon">...</item>-->
    <!-- Layout for query suggestion rows -->
    <item name="suggestionRowLayout">@layout/item_suggestion_place</item>
</style>

1
localhost

У меня была такая же проблема (белый текст в предложениях на белом фоне), но все ответы не работают для меня. Так что я наконец решил это с изменением textColor атрибута для TextView для адаптера , прикрепленного к AutoCompleteTextView :

код:

AutoCompleteTextView autoComplete = ...;
List<String> suggestions = Arrays.asList("a", "b", "c");
ArrayAdapter<String> adapter = new ArrayAdapter<>(context, R.layout.dropdown_item, suggestions);
autoComplete.setAdapter(adapter);

dropdown_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
      Android:textColor="#000000"
      ...
/>
1
Evgeny Vagin