2013-07-16 10 views
6

Ho un widget SearchView nella mia app e voglio fare alcune domande su come personalizzarlo. Prima di tutto, puoi avviare la ricerca solo facendo clic sull'icona di ricerca, c'è un modo per rendere cliccabile l'intero SearchView? Inoltre, c'è un modo per far sembrare SearchView qualcosa di simile quando viene cliccato?Ricerca personalizzata Visualizza tutto cliccabile in Android

a busy cat http://i41.tinypic.com/rr2ow4.png [] [1]

Ora è in questo stato:!!

a busy cat http://i41.tinypic.com/11jlu2p.png [] [1]

Ecco il mio codice:

citySearch = (SearchView) findViewById(R.id.city_search_bar); 
    citySearch.setBackgroundResource(R.drawable.search_background); 
    citySearch.setOnSearchClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      citySearch.setIconifiedByDefault(true); 
      //citySearch.setIconified(true); 
     } 

    }); 
    citySearch.setOnQueryTextListener(new OnQueryTextListener() { 

     @Override 
     public boolean onQueryTextChange(String text) { 

      ((Filterable) cityListView.getAdapter()).getFilter().filter(text); 

      return false; 
     } 

     @Override 
     public boolean onQueryTextSubmit(String text) { 

      return false; 
     } 

    }); 

    try 
    { 
     Field searchField = SearchView.class.getDeclaredField("mSearchButton"); 
     searchField.setAccessible(true); 
     ImageView searchBtn = (ImageView)searchField.get(citySearch); 
     searchBtn.setImageResource(R.drawable.search_icon); 
     searchBtn.setScaleType(ScaleType.FIT_CENTER); 
     searchPlate.setBackgroundResource(R.drawable.search_background); 
    } 
    catch (NoSuchFieldException e) 
    { 
     Log.e("SEARCHSTYLEERROR",e.getMessage(),e); 
    } 
    catch (IllegalAccessException e) 
    { 
     Log.e("SEARCHSTYLEERROR",e.getMessage(),e); 
    } 
+1

Ok, il primo problema è stato risolto utilizzando citySearch-s setOnClickListener. –

+0

Dovresti rispondere a questa domanda con il tuo commento ... ha risolto il mio problema – coder

+0

@AnhaytAnanun Hai risolto questi problemi adesso? Se sì, qual è la soluzione? Puoi condividere la soluzione ... Potrebbe aiutarci anche noi –

risposta

19

Per impostazione predefinita, SearchView è "iconificato", che viene visualizzato come un'icona a forma di lente di ingrandimento e solo se l'utente fa clic sull'icona on, quindi il campo di modifica si espande.

Per consentire all'utente di fare clic in qualsiasi punto di SearchView ed espandere il campo di input. Abbiamo solo bisogno di aggiungere un listener di clic e chiamare setIconified (false) quando l'utente fa clic.

searchView = (SearchView)findViewById(R.id.searchView); 
searchView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      searchView.setIconified(false); 
     } 
    }); 
1

Un altro modo semplice per farlo impostando onActionViewExpanded().

searchView = (SearchView)findViewById(R.id.searchView); 
searchView.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     searchView.onActionViewExpanded(); 
    } 
}); 
0

Per consentire la scrittura quando si fa clic in tutta la componente, vi consiglio di dichiarare iconifiedByDefault="false" sul xml.

<SearchView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:iconifiedByDefault="false"/> 
Problemi correlati