2012-04-10 14 views
40

Witam muszę umieścić tekst wewnątrz searchView i focus/expand widget searchView.Android jak skupić się na ActionBar searchView

to co próbowałem, ale to nie działa

@Override 
public boolean onCreateOptionsMenu(final Menu menu) { 
... 
    SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); 
    searchView.setQuery(this.filtro, false); 
    searchView.setFocusable(true); 
    searchView.requestFocus(); 
    searchView.requestFocusFromTouch(); 

Odpowiedz

88

Spróbuj użyć searchView.setIconified(false). To zadziałało dla mnie:

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    ActionBar actionBar = getActionBar(); 
    SearchView searchView = new SearchView(this); 
    actionBar.setCustomView(searchView); 
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
    searchView.setQuery("test",true); 
    searchView.setFocusable(true); 
    searchView.setIconified(false); 
    searchView.requestFocusFromTouch(); 
} 
+0

Schludny. Wygląda o wiele czystsze niż przesłonięcie 'onCreateOptionsMenu' i ustawienie xmls. – bompf

+3

"Ale już nazywam' setIconifiedByDefault (false) '," mówisz. "To nie dotyczy mnie" - mówisz. Nie bądźcie jak ja, dzieciaki. Wywołaj 'setIconified (false)' zamiast gonić swój ogon przez godzinę. –

+0

Dziwne, ale 'setIconified (false)' naprawdę wykonuje zadanie! – WindRider

4

Oto inne rozwiązanie.

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main_menu, menu); 
    MenuItem menu_search = menu.findItem(R.id.menu_search); 


    menu_search.setOnActionExpandListener(new OnActionExpandListener() { 
     @Override 
     public boolean onMenuItemActionCollapse(MenuItem item) { 
      // Do something when collapsed 
      return true; // Return true to collapse action view 
     } 

     @Override 
     public boolean onMenuItemActionExpand(MenuItem item) { 
      //get focus 
      item.getActionView().requestFocus(); 
      //get input method 
      InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); 
      return true; // Return true to expand action view 
     } 
    }); 
    return true; 
} 
+0

Dzięki, kolego! Tylko twoja wersja metody przełączania klawiatury działała poprawnie z widokiem wyszukiwania ActionBarSherlock, po dziesiątkach innych nieudanych prób. – whyleee

+0

item.expandActionView(); wystarczy mi. :) –

+0

Po wyjątku 'java.lang.UnsupportedOperationException: To nie jest obsługiwane, użyj MenuItemCompat.setOnActionExpandListener()' Zmieniłem trochę kod, ale nic się nie stało. – CoolMind

2

Działa to dla mnie:

 @Override 
     public boolean onMenuItemActionExpand(MenuItem item) 
     { 
      if (sm.isMenuShowing()) { 
       sm.toggle(); 
      } 
      searchView.setIconified(true); 
      KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, 32); 
      searchView.onKeyDown(32, event); 
      return true; 
     } 
0
searchView.setQuery("typeAnything",true); 
searchView.setFocusable(true); 

rade.

+0

Dla mnie to było za mało (korzystam z android.support.v7.widget.SearchView). – CoolMind

1

Dla mnie następujące prace:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    ... 
    MenuItem miSearch = menu.findItem(R.id.menu_search); 
    SearchView mSearchView = (SearchView) miSearch.getActionView(); 

    mSearchView.setOnSearchClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mSearchView.setFocusable(true); 
      mSearchView.requestFocusFromTouch(); 
     } 
    }); 

używam android.support.v7.widget.SearchView. Próbując ustawić mSearchView.setIconified(false); wszedł w nieskończoną pętlę.

+1

Ten też zadziałał dla mnie. Używam 'android.support.v7.widget.SearchView' Dziękuję kumpel. Po dwóch dniach w końcu jedna odpowiedź działa! :) Dodałem także: 'searchView.setIconified (false);' – Mohsen

+1

Dzięki, @Mohsen! Tak, masz rację, czasami Android jest zbyt denerwujący. Powodzenia! – CoolMind

Powiązane problemy