8

Sto provando a modellare il widget SearchView utilizzando il nuovo AppCompat v21, ma sto affrontando alcuni problemi. Indipendentemente dal layout impostato sull'attributo "suggestionRowLayout", non fa nulla. L'elenco a discesa dei suggerimenti di SearchView rimane allo stesso modo.Styling del widget SearchView utilizzando la libreria di supporto v21

Altro problema che sto riscontrando è quando il "colore di accento" è dello stesso colore del "colore primario", nella searchview è impossibile distinguere dove è il cursore. Sai come posso cambiare il colore dell'accento nel SearchView per applicarlo solo lì? Ho scoperto che Play Music ha lo stesso problema.

Sto seguendo la guida da Android Developers Blog:

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

risposta

5

Secondo quello che ho visto nel valore risorsa di origine SearchView suggestionRowLayout in SearchView si verifica quando si recuperano gli attributi per il SearchView e in il metodo getSuggestionRowLayout(). D'altra parte l'implementazione di SuggestionAdapter della libreria v7 si sta gonfiando abc_search_dropdown_item_icons_2line.

Idea per una soluzione:

Prova riferimento diverso layout con l'aiuto di refs.xml. Assicurarsi di mantenere stesso ID per views come in abc_search_dropdown_item_icons_2line

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

che funziona! Ma come per [documentazione] (http://android-developers.blogspot.com.es/2014/10/appcompat-v21-material-design-for-pre.html) il nuovo Api supporta lo styling di SearchView. Quello è quello che ho provato prima della soluzione alternativa: ' @ layout/searchview_dropdown ' – MrBrightside

+0

questo non sta funzionando per me – JDJ

0

suggestionsRowLayout non funzionava neanche per me.

Nel mio caso, ho solo bisogno di cambiare il colore di sfondo di ogni riga e il colore del testo.

così si può modificare il layout della vista tornato da newView() nel mio 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> 

Si potrebbe, naturalmente, impostare lo sfondo ad un drawable selettore per click mette in risalto.

1

Il mio problema era che la SearchView non era di tipo android.support.v7.widget.SearchView, quindi tutti lo stile non si applicava

<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"/> 
Problemi correlati