2012-04-10 11 views
40

Hola, necesito poner algo de texto dentro de la búsquedaVer y enfocar/expandir el widget de búsqueda.Android cómo enfocar la búsqueda de ActionBarVer

esto es lo que he intentado pero no funciona

@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(); 

Respuesta

88

Trate de usar searchView.setIconified(false). Esto funcionó para mí:

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

Neat. Se ve mucho más limpio que anular 'onCreateOptionsMenu' y configurar xmls. – bompf

+3

"Pero ya estoy llamando a' setIconifiedByDefault (false) '," dices. "Esto no debe aplicarse a mí", dices. No seas como yo, niños. Llame a 'setIconified (false)' en lugar de perseguir su cola durante una hora. –

+0

Extraño pero 'setIconified (falso)' realmente hace el trabajo! – WindRider

4

Aquí hay otra solución.

@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

¡Gracias, amigo! Solo su versión del método de alternancia del teclado funcionó correctamente con la vista de búsqueda de ActionBarSherlock, después de decenas de otros intentos fallidos. – whyleee

+0

item.expandActionView(); es suficiente para mi :) –

+0

Después de la excepción 'java.lang.UnsupportedOperationException: Esto no es compatible, use MenuItemCompat.setOnActionExpandListener()' Cambié el código un poco, pero no pasó nada. – CoolMind

2

Esto funciona para mí:

 @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); 

hará el truco.

+0

Para mí eso no fue suficiente (utilizo android.support.v7.widget.SearchView). – CoolMind

1

Para mí las siguientes obras:

@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(); 
     } 
    }); 

que utilizo android.support.v7.widget.SearchView. Cuando intentó establecer mSearchView.setIconified(false);, entró en un bucle infinito.

+1

Éste también funcionó para mí. Estoy usando 'android.support.v7.widget.SearchView' Gracias amigo. ¡Después de dos días, finalmente, una respuesta funciona! :) También agregué: 'searchView.setIconified (false);' – Mohsen

+1

Gracias, @Mohsen! Sí, tienes razón, a veces Android es demasiado molesto. ¡Buena suerte! – CoolMind

Cuestiones relacionadas