texto teclado tapar tapa studio pulsar ocultar iniciar fuera edittext con caja boton activity abrir android android-softkeyboard actionbarsherlock android-actionbar android-menu

android - tapar - ¿Cómo puedo concentrarme en un elemento EditText de la vista de acción plegable en la barra de acción(cuando está expandida) y forzar la apertura del teclado virtual?



ocultar teclado android in fragment (3)

Funciona para mí también!

Para colapsar ActionView y ocultar el teclado, uso:

Configure el Oyente para capturar el botón de búsqueda (o cualquier otro) presione el teclado virtual, luego use collapseActionView() :

searchText.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_SEARCH) { searchMenuItem.collapseActionView(); return true; } return false; } });

Luego escriba el código de ocultación del teclado en el método onMenuItemActionCollapse() .

public boolean onMenuItemActionCollapse(MenuItem item) { // Do something when collapsed searchText.post(new Runnable() { @Override public void run() { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(searchText.getWindowToken(), 0); } }); return true; // Return true to collapse action view }

Estoy utilizando la excelente biblioteca ActionBarSherlock de Jake Wharton y tengo una vista de acción de búsqueda plegable. Quiero abrir el teclado virtual cuando se expande la vista de acción de búsqueda.

Podemos leer una forma recomendada de hacer esto en un mensaje de diálogo de diálogo en la publicación del blog " Uso de los cuadros de diálogo " de Google (modificado un poco para mejorar la legibilidad).

// Show soft keyboard automatically mEditText.requestFocus(); int mode = WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE; getDialog().getWindow().setSoftInputMode(mode);

Esto no parece funcionar cuando se expande y solicita el enfoque en una vista de acción de Editor de texto plegable . Actualmente tengo esto.

@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getSupportMenuInflater(); inflater.inflate(R.menu.my_activity, menu); MenuItem menuItem = menu.findItem(R.id.menu_search); final EditText searchText = (EditText) menuItem.getActionView(); menuItem.setOnActionExpandListener(new OnActionExpandListener() { @Override public boolean onMenuItemActionCollapse(MenuItem item) { return true; // Return true to collapse action view } @Override public boolean onMenuItemActionExpand(MenuItem item) { searchText.requestFocus(); int mode = WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE; getWindow().setSoftInputMode(mode); return true; // Return true to expand action view } }); }

Aquí está la definición de mi elemento de menú en el archivo xml del menú my_activity:

<item android:id="@+id/menu_search" android:icon="@drawable/ic_menu_search" android:actionLayout="@layout/collapsible_edittext" android:showAsAction="always|collapseActionView" android:title="@string/menu_search"/>

... y el diseño de la acción collapsible_edittext

<?xml version="1.0" encoding="utf-8"?> <EditText xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="@string/hint_search" android:imeOptions="actionSearch" android:inputType="text" android:focusable="true" android:focusableInTouchMode="true" />

Advertencia: no quiero forzar el teclado suave. Cuando el usuario tiene un teclado de hardware solicitando enfoque es suficiente.

¿Algún pensamiento de alguien?


Para una implementación más fácil de un elemento de búsqueda colapsable en su Barra de Acción, simplemente puede usar SearchView que también está disponible en ActionBarSherlock ( com.actionbarsherlock.widget.SearchView ).

Viene con muchos métodos prácticos y manijas que muestran / ocultan el teclado del software al expandir / contraer la vista automáticamente. Además, es más fácil definir qué hacer al enviar la búsqueda. Simplemente eche un vistazo a todos los oyentes que puede configurar en ese SearchView .

Aquí hay un ejemplo:

@Override public boolean onCreateOptionsMenu(Menu menu) { SearchView searchView = new SearchView(this); searchView.setQueryHint(getString(R.string.search_hint)); searchView.setOnQueryTextListener(new OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { // what to do on submit, e.g. start an Activity and pass the query param return true; } @Override public boolean onQueryTextChange(String newText) { return false; } }); menu.add(getString(R.string.search_title)) .setIcon(R.drawable.ic_action_search) .setActionView(searchView) .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM|MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); // ...place to add other menu items return super.onCreateOptionsMenu(menu); }

Otra buena razón: tuve algunos problemas de diseño en dispositivos antiguos al usar un texto de EditText personalizado como mi vista de búsqueda (como lo hizo en su pregunta). El SearchView predeterminado resolvió todos estos problemas y me ahorró muchas líneas de código.


Tal vez el requestFocus nunca ocurrió en el código en la pregunta porque el searchText no se expandió todavía? No sé, de todos modos ... esto funcionó para mí:

@Override public boolean onMenuItemActionExpand(MenuItem item) { searchText.post(new Runnable() { @Override public void run() { searchText.requestFocus(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(searchText, InputMethodManager.SHOW_IMPLICIT); } }); return true; // Return true to expand action view }