8

Próbuję ustawić widżet SearchView za pomocą nowego AppCompat v21, ale mam pewne problemy. Niezależnie od tego, jaki układ ustawię w atrybucie "suggestionRowLayout", nie robi on nic. Lista rozwijana sugestii SearchView pozostaje taka sama.Stylizowanie widżetu SearchView przy użyciu biblioteki pomocniczej v21

Innym problemem, jaki mam, jest to, że "kolor akcentu" jest tego samego koloru co "kolor podstawowy", w widoku wyszukiwania nie można odróżnić, gdzie znajduje się karetka. Czy wiesz, jak mogę zmienić kolor akcentu w SearchView, aby był stosowany tylko tam? Odkryłem, że Play Music ma ten sam problem.

Obserwuję przewodnika z Android Developers blogu:

http://android-developers.blogspot.com.es/2014/10/appcompat-v21-material-design-for-pre.html

Odpowiedz

5

Zgodnie z tym co widziałem w wartości zasobów źródło SearchView suggestionRowLayout w SearchView występuje podczas pobierania atrybuty dla SearchView iw metoda getSuggestionRowLayout(). Z drugiej strony implementacja biblioteki SuggestionAdapter biblioteki v7 powoduje nadpisanie abc_search_dropdown_item_icons_2line.

Pomysł na obejście:

Spróbuj przedstawieniu inny układ z pomocą refs.xml. Upewnij się zachować te same identyfikatory dla views jak w abc_search_dropdown_item_icons_2line

<item type="layout" name="abc_search_dropdown_item_icons_2line">@layout/my_suggestion_row</item> 
+0

To działa! Ale zgodnie z [dokumentacją] (http://android-developers.blogspot.com.es/2014/10/appcompat-v21-material-design-for-pre.html) nowy Api obsługuje stylizację SearchView. To co próbowałem przed obejścia: ' @ układ/searchview_dropdown ' – MrBrightside

+0

To nie działa dla mnie – JDJ

0

suggestionsRowLayout nie działa na mnie też.

W moim przypadku wystarczy zmienić kolor tła każdego wiersza i kolor tekstu.

Więc po prostu zmodyfikowany układ Widoku wrócił z newView() w moim SuggestionsAdapter:

public class SuggestionsAdapter extends CursorAdapter 
{ 
    public SuggestionsAdapter(Context context, Cursor cursor) 
    { 
     super(context, cursor, false); 
    } 

    @Override 
    public void bindView(View view, Context context, Cursor cursor) 
    { 
     TextView tv = (TextView) view.findViewById(R.id.item); 

     tv.setText(cursor.getString(COL_NAME)); 
    } 

    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) 
    { 
     LayoutInflater inflater = (LayoutInflater) 
       context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     // I modified the layout of search_item.xml 
     View view = inflater.inflate(R.layout.search_item, parent, false); 

     return view; 
    } 
} 

search_item.xml

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:background="@color/white" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="12dp" > 

    <TextView 
     android:id="@+id/item" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="@color/red" /> 

</LinearLayout> 

Można oczywiście ustawić tło względem rozciągliwej wybieraka do kliknięcia najważniejsze.

1

Mój problem był taki, że nie było Searchview typu android.support.v7.widget.SearchView, dlatego wszystko stylizacji nie stosowała

<item android:id="@+id/action_search" 
     android:icon="@drawable/ic_action_search" 
     android:title="@string/action_search" 
     app:showAsAction="ifRoom" 
     app:actionViewClass="android.support.v7.widget.SearchView"/> 
Powiązane problemy