Tengo un WebView y algunos botones en mi diseño. Hay una etiqueta grande en mi WebView. Esta aplicación se usa para editar archivos de texto. Los botones se utilizan para afectar el área de texto dentro de mi WebView. Cuando el usuario presiona un botón (como un botón de flecha para mover la vista de texto) cierra el teclado. He usado toggleSoftInput, pero eso solo cambia el teclado para mostrar o no. Quiero que los botones dejen de ocultar el teclado virtual cuando se presiona el botón. No he encontrado nada sobre mi problema específico. He buscado durante semanas. ¿Alguien tiene alguna idea sobre cómo puedo evitar que mis botones oculten el teclado virtual en Android?Cómo evitar que los botones oculten el teclado suave en Android
Respuesta
La solución a su problema puede ser mantener el teclado siempre visible y dejar que el usuario lo cierre cuando se realizan las acciones.
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.toggleSoftInput (InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
Pruebe este código en el método onCreate() de su Actividad. Tenga en cuenta que si el usuario presiona el botón Cerrar en el teclado o el botón Atrás, debería cerrarlo. Y supongo que no deberías interferir con ese escenario. Y cuando las acciones están hechas, puede cerrar el teclado desde el código.
Estoy exactamente en el mismo barco, así que si alguna vez encuentras una solución ideal, me encantaría escucharla.
EDITAR: ¡Éxito! O mucho mejor que antes, de todos modos. Eliminé mi solución anterior, ya que esta es mejor.
Como se indica en https://stackoverflow.com/a/10536033/513038, loadData() oculta el teclado. Sin embargo,, descubrí que en el hideSoftKeyboard() de WebView, comprueba el InputMethodManager para ver si la vista web está activa, a través de imm.isActive (mWebView).
Por lo tanto, si cambia el foco a EditText antes de loadData(), y vuelve a cambiar a la WebView inmediatamente después, ¡el teclado se queda fijo! Cambia brevemente a mayúsculas, creo que al volver el enfoque a la vista web, (en realidad, esto no siempre parece suceder, depende) pero es mucho menos notable que el teclado parpadeando hacia atrás y hacia atrás.
La esencia de lo que debe suceder es la siguiente.
Extender WebView. Darle un campo EditarTexto:
public EditText mFocusDistraction;
En el constructor, tienen las siguientes líneas:
mFocusDistraction = new EditText(context);
addView(mFocusDistraction);
Luego de anulación LoadURL():
public void loadUrl(String s) {
mFocusDistraction.requestFocus();
super.loadUrl(s);
this.requestFocus();
}
Eso debería hacerlo funcionar, básicamente. Es un poco buggy, sin embargo, lo que aquí es una clase más completa:
import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.webkit.WebView;
import android.widget.EditText;
public class WebViewMod extends WebView {
public EditText mFocusDistraction;
public Context mContext;
public WebViewMod(Context context) {
super(context);
init(context);
}
public WebViewMod(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public WebViewMod(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
public WebViewMod(Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) {
super(context, attrs, defStyle, privateBrowsing);
init(context);
}
public void init(Context context) {
// This lets the layout editor display the view.
if (isInEditMode()) return;
mContext = context;
mFocusDistraction = new EditText(context);
mFocusDistraction.setBackgroundResource(android.R.color.transparent);
this.addView(mFocusDistraction);
mFocusDistraction.getLayoutParams().width = 1;
mFocusDistraction.getLayoutParams().height = 1;
}
@Override
public void loadUrl(final String url) {
if (mContext instanceof Activity && this.isFocused()) {
((Activity)mContext).runOnUiThread(new Runnable() {
@Override
public void run() {
mFocusDistraction.requestFocus();
WebViewMod.super.loadUrl(url);
WebViewMod.this.requestFocus();
}
});
} else {
super.loadUrl(url);
}
}
}
Xamarin Android (Alternativa):
InputMethodManager inputManager = (InputMethodManager)GetSystemService(Context.InputMethodService);
inputManager.ToggleSoftInput (ShowFlags.Forced, HideSoftInputFlags.ImplicitOnly);
- 1. Evitar que se descarte el teclado suave
- 2. ¿Cómo evitar que se abra el teclado suave en el lanzamiento de actividad en Android?
- 3. Cómo mantener los botones DialogFragment positivos/negativos sobre el teclado suave
- 4. Flex impiden que el teclado suave del cierre
- 5. ¿Cómo puedo eliminar el teclado suave de muestra de Android?
- 6. teclado suave específico para aplicaciones Android
- 7. Cómo evitar que el teclado en pantalla cubra EditText en android
- 8. Android: cargando JavaScript con WebView.loadUrl pero manteniendo el teclado suave
- 9. ¿Cómo es que el teclado suave de Android no responde a EditText?
- 10. Mostrar teclado suave en AlertDialog con WebView dentro (Android)
- 11. Botón de acción de teclado suave de Android
- 12. El teclado suave cubre un EditText en una ventana emergente
- 13. Teclado suave de Android personalizado Texto del botón "Hecho"?
- 14. Diseño de tamaño de teclado de Android suave
- 15. brecha entre botones en el teclado jqueryui()
- 16. Superposición de teclado suave con EditText Campo
- 17. El diseño debería subir cuando apareció el teclado suave en Android
- 18. Android Emulator: entrada de teclado suave y entrada de teclado duro
- 19. Android: enumerando los botones en un gamepad
- 20. Teclado suave de números únicos similares al del teléfono
- 21. Tipo de entrada/clave personalizada para el teclado suave de Android
- 22. Android OpenGL ES, desplazamiento suave
- 23. jQuery Mobile Force ocultar el teclado suave en el campo de entrada de texto de enfoque
- 24. ¿Cómo hacer clic en el botón de "búsqueda" del teclado suave con la prueba de Robotium?
- 25. ¿Cómo descartar el teclado en Android SearchView?
- 26. Evitar que UIWebView se desplace cuando aparezca el teclado
- 27. Cómo poner el fondo de teclado en Android
- 28. Android - Teclado suave presiona el diseño de mi actividad fuera de la pantalla
- 29. Android cerrar el teclado
- 30. Android: ¿Cómo hacer que el teclado siempre esté visible?
esto tiene el problema de perder el foco de un campo de entrada/texto seleccionado previamente. 1) seleccione la entrada para escribir 2) loadUrl se llama 3) el teclado aún está activo, pero al escribirlo no hace nada (ya no está escribiendo en la misma entrada –
@HaykSaakian ¿Realmente?No se; lo que tengo funciona para mí, y no creo que cometí ningún error cuando lo puse aquí. Supongo que está intentando escribir en la misma página web que está ejecutando loadUrl, ¿verdad? – Erhannis
tal vez solo sea una pequeña ventana de tiempo, ¿y en su caso no lo nota? en mi caso tengo una página a la que llamo loadUrl muchas veces por segundo (página de chat que usa websockets java que inyectan mensajes utilizando loadUrl con javascript) –