2013-07-16 6 views
6

Ich habe ein SearchView-Widget in meiner App, und ich möchte einige Fragen stellen, um es benutzerdefiniert zu machen. Zunächst können Sie die Suche nur durch Klicken auf das Suchsymbol starten. Gibt es eine Möglichkeit, die gesamte SearchView anklickbar zu machen? Gibt es auch eine Möglichkeit, SearchView so aussehen zu lassen, wenn es angeklickt wird? Custom SearchView ganz anklickbar in Android

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

Es ist nun in diesem Zustand:!

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

Hier ist mein Code:

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, das erste Problem wurde mit dem setOnClickListener von citySearch behoben. –

+0

Sie sollten diese Frage mit Ihrem Kommentar beantworten ... es löste mein Problem – coder

+0

@AnhaytAnanun Haben Sie diese Probleme jetzt gelöst? Wenn ja, was ist die Lösung? Können Sie bitte die Lösung teilen ... Es könnte uns auch helfen –

Antwort

19

Standardmäßig ist die SearchView 'iconified', die als ein Lupensymbol angezeigt wird und nur wenn der Benutzer auf den ic klickt an, dann wird das Bearbeitungsfeld erweitert.

Um dem Benutzer zu ermöglichen, irgendwo auf das SearchView zu klicken und das Eingabefeld zu erweitern. Wir müssen nur einen Klick-Listener hinzufügen und setIconified (false) aufrufen, wenn der Benutzer klickt.

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

Eine andere einfache Möglichkeit, dies zu tun, indem onActionViewExpanded() eingestellt wird.

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

Schreiben zu ermöglichen, wenn in der gesamten Komponente klicken, würde ich Sie iconifiedByDefault="false" auf der XML-Deklaration empfehlen.

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