2010-08-05 17 views
13

Estoy luchando con el botón hecho en el teclado virtual. No puedo presionar la tecla suave del teclado Done para ocultar el teclado. De otro botón, funciona perfectamente conHide Soft Keyboard on Done ¿Teclea la tecla en Android?

imm.hideSoftInputFromWindow(editText.getApplicationWindowToken(), 0);

pero el onKeyListener no funciona como yo quiero. Cuando presiono EditText, aparece el teclado virtual y su contenido se borra de los caracteres.

¡Gracias por escuchar!

El main.xml:

<EditText 
    android:id="@+id/answer" 
    android:layout_gravity="center_horizontal" android:textSize="36px" 
    android:inputType="phone" 
    android:minWidth="60dp" android:maxWidth="60dp" 
/> 

El archivo Java:

private EditText editText; 
//... 
editText = (EditText)findViewById(R.id.answer); 
editText.setOnClickListener(onKeyboard); 
editText.setOnKeyListener(onSoftKeyboardDonePress); 
//... 

// method not working: 
private View.OnKeyListener onSoftKeyboardDonePress=new View.OnKeyListener() 
{ 
    public boolean onKey(View v, int keyCode, KeyEvent event) 
    { 
     if (event.getKeyCode() == KeyEvent.FLAG_EDITOR_ACTION) 
     { 
      // code to hide the soft keyboard 
      imm = (InputMethodManager) getSystemService(
       Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(editText.getApplicationWindowToken(), 0); 
     } 
     return false; 
    } 
}; 

private View.OnClickListener onKeyboard=new View.OnClickListener() 
{ 
    public void onClick(View v) 
    { 
     editText.setText(""); 
    } 
}; 

El método de trabajo mediante un botón (en el mismo archivo Java):

private View.OnClickListener onDone=new View.OnClickListener() 
{ 
    public void onClick(View v) 
    { 
     //.... 
     // code to hide the soft keyboard 
     imm = (InputMethodManager) getSystemService(
      Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(editText.getApplicationWindowToken(), 0); 
    } 
}; 

Editar : Cuando presiono la tecla "9", el teclado se esconde. Eso es extraño.

Respuesta

25

uso androide: imeOptions = "actionDone", al igual que:

<EditText 
    ... 
    android:imeOptions="actionDone" /> 
+2

¡Funciona como un encanto! :) –

+2

no funciona para mí, realmente extraño en la llamada programación de Android. –

+1

Cuando editext está en una vista de desplazamiento, se equivoca. –

19
InputMethodManager inputManager = (InputMethodManager) 
context.getSystemService(Context.INPUT_METHOD_SERVICE); 
inputManager.toggleSoftInput(0, 0); 

con context es tu actividad.

+1

¡Gracias por su esfuerzo! Cambié el enunciado if por if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) que lo hizo funcionar con el atributo xml android: inputType = "phone". Guardaré tu respuesta hasta el próximo problema con el teclado suave. BR - –

4

Cambió la instrucción if a if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) que funcionó con el atributo xml android:inputType="phone".

1

Usted debe echar un vistazo a setOnEditorActionListener() para el EditarTexto:

Establecer un oyente especial que se llamará cuando se realiza una acción en la vista texto. Se invocará esto cuando se presione la tecla enter, o cuando el usuario seleccione una acción suministrada al IME.

0

uso por debajo de código con android:imeOptions="actionDone" su trabajo para mí.

<EditText 
    android:id="@+id/et_switch_name"  
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:hint="Name" 
    android:imeOptions="actionDone"  
    android:inputType="textPersonName" />