2013-07-16 14 views
6

Mam widżet SearchView w mojej aplikacji i chcę zadać kilka pytań na temat jego dostosowania. Przede wszystkim możesz rozpocząć wyszukiwanie tylko przez kliknięcie ikony wyszukiwania, czy istnieje sposób na kliknięcie całego SearchViewView? Czy istnieje również sposób, aby SearchView wyglądał mniej więcej tak, gdy zostanie kliknięty?Wyszukiwanie niestandardoweWszystko klikalne w Androidzie

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

Jest teraz w tym stanie:!

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

Oto mój kod:

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, pierwszy problem został rozwiązany za pomocą setSQLClickListener citySearch. –

+0

Powinieneś odpowiedzieć na to pytanie swoim komentarzem ... rozwiązał mój problem – coder

+0

@AnhaytAnanun Czy rozwiązałeś teraz te problemy? Jeśli tak, to jakie rozwiązanie? Czy możesz dzielić się rozwiązaniem ... To może nam pomóc –

Odpowiedz

19

Domyślnie SearchView jest "iconised", który jest wyświetlany jako ikona lupy i tylko wtedy, gdy użytkownik kliknie na IC włączone, pole edycyjne rozwija się.

Aby umożliwić użytkownikowi kliknięcie w dowolnym miejscu w oknie SearchView i rozwinięcie pola wprowadzania. Musimy tylko dodać detektor kliknięcia i wywołać setIconified (false), gdy użytkownik kliknie.

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

Innym prostym sposobem, aby to zrobić poprzez ustawienie onActionViewExpanded().

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

Aby umożliwić pisanie po kliknięciu w całym komponentu, polecam Ci deklarując iconifiedByDefault="false" na XML.

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