android - poner - teclado samsung
Forzar la apertura del teclado suave (10)
Intento forzar la apertura del Teclado suave en una Actividad y tomar todo lo que se ingresa, ya que quiero manejar la entrada yo mismo, no tengo un EditarTexto. Actualmente lo he intentado pero no funciona. Me gustaría que el Soft Keyboard se abra debajo de mAnswerTextView (Nota: es un TextView no EditText).
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// only will trigger it if no physical keyboard is open
mgr.showSoftInput(mAnswerTextView, InputMethodManager.SHOW_IMPLICIT);
- ¿Cómo forzar el teclado suave abierto
- ¿Cómo respondo todo lo que se ingresa para poder manejar cada personaje? Me gustaría eliminar a cada personaje del Teclado suave después de haberlo manejado. es decir, el usuario no debería poder ingresar palabras enteras en el Teclado Suave.
Algunas veces las otras respuestas no funcionarán.
Aquí hay otra manera ...
Obligará al teclado a mostrar cuándo comienza la actividad escuchando el foco de la ventana. onWindowFocusChanged()
borrará y solicitará el enfoque de EditText, luego establecerá el modo de entrada suave como visible y configurará la selección para el texto en el cuadro. Esto siempre debería funcionar si lo llamas desde la actividad.
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
mEditText.clearFocus();
mEditText.requestFocus();
getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
mEditText.setSelection(mEditText.getText().toString().length());
}
}
Es posible que también necesites
mEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(mEditText, InputMethodManager.SHOW_IMPLICIT);
}
}
});
Editar: También he visto que el teclado no se abre dentro de fragmentos anidados, ten cuidado con ese tipo de situaciones.
He probado y esto está funcionando:
... // para mostrar el teclado suave
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
// para ocultarlo, llame de nuevo al método
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
Para forzar que se abra el teclado, utilicé
this.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
funcionó para mí.
Probablemente necesites tener un área de texto editable de algún tipo para enfocar. Sin embargo, es probable que puedas tener un fondo invisible o transparente sin cursor. Es posible que necesite juguetear con las configuraciones de capacidad de enfoque para la vista.
Use un TextWatcher para buscar ediciones en EditText con addTextChangedListener , o si necesita un gancho de nivel inferior, configure el oyente de claves de la vista de texto con su método setOnKeyListener (). Vea la documentación de KeyListener .
Use esta llamada para forzar el teclado suave abierto:
((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE))
.showSoftInput(myEditText, InputMethodManager.SHOW_FORCED);
y este para cerrarlo:
((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
tenga en cuenta que esto realmente no es recomendable, forzar el teclado abierto es algo complicado. ¿Cuál es su caso de uso que realmente requiere que el usuario tome una entrada sin un cuadro de edición normal y requiere que el usuario ingrese la información clave por clave sin repetirla?
Simplemente, usar agregar 2 líneas funcionará como un encanto:
Si usas XML
android:focusable="true"
android:focusableInTouchMode="true"
Else en Java:
view.setFocusableInTouchMode(true);
view.requestFocus();
Tristemente, por mucho que me hubiera gustado votar una de las respuestas, ninguna me funcionó. Parece que la solución es esperar a que se complete la fase de diseño. En el siguiente código, observe cómo compruebo si el método showKeyboard
devuelve TRUE, y es entonces cuando showKeyboard
el oyente de diseño global. Sin hacer esto, fue al azar. Ahora parece funcionar perfectamente.
Debes hacer lo siguiente idealmente en onResume()
@Override
public void onResume()
{
super.onResume();
ViewTreeObserver vto = txtTaskTitle.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener()
{
@Override
public void onGlobalLayout()
{
if (txtTaskTitle.requestFocus())
{
if (showKeyboard(getContext(), txtTaskTitle))
{
txtTaskTitle.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
}
}
});
}
public static boolean showKeyboard(Context context, EditText target)
{
if (context == null || target == null)
{
return false;
}
InputMethodManager imm = getInputMethodManager(context);
((InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(target, InputMethodManager.SHOW_FORCED);
boolean didShowKeyboard = imm.showSoftInput(target, InputMethodManager.SHOW_FORCED);
if (!didShowKeyboard)
{
didShowKeyboard = ((InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(target, InputMethodManager.SHOW_FORCED);
}
return didShowKeyboard;
}
intente esto para forzar el teclado suave abierto:
((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
entonces puedes usar este código para cerrar el teclado:
((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(_pay_box_helper.getWindowToken(), 0);
si quieres controlar el teclado suave dentro de la actividad, utiliza este código:
//create soft keyboard object
InputMethodManager imm = (InputMethodManager)this.getSystemService(INPUT_METHOD_SERVICE);
//1.USE
your_view.setFocusableInTouchMode(true); //Enable touch soft keyboard to this view
//or
your_view.setFocusable(true); //Enable keyboard to this view
imm.showInputMethod(your_view, InputMethodManager.SHOW_IMPLICIT);
//2.USE show keyboard if is hidden or hide if it is shown
imm.toggleSoftInputFromWindow(your_view.getWindowToken(),InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_IMPLICIT_ONLY);
//or
imm.toggleSoftInputFromWindow(InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_IMPLICIT_ONLY);
//3.USE (you cannot control imm)
this.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
//4.USE (with Dialog)
Dialog d = new Dialog(this, android.R.style.Theme_Panel);
d.getWindow().setTitle(null);
d.setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
d.setOnKeyListener(keyListener);
d.setCanceledOnTouchOutside(true);
d.setCancelable(true);
d.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
d.show();
//to hide keyboard call:
d.dismiss();
//if you want get soft keyboard visibility call:
d.isShowing();
Trabajando muy bien .........
edt_searchfilter_searchtext.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
edt_searchfilter_searchtext.post(new Runnable() {
@Override
public void run() {
InputMethodManager imm = (InputMethodManager) getFragmentActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(edt_searchfilter_searchtext, InputMethodManager.SHOW_IMPLICIT);
}
});
}
}
});
Llamada debajo de la línea cuando quieres abrir el teclado
edt_searchfilter_searchtext.requestFocus();
if(search.getText().toString().trim().isEmpty()) {
InputMethodManager imm = (InputMethodManager)getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(search.getWindowToken(), 0);
}