2010-08-05 17 views
13

Sono in difficoltà con il pulsante Fine sulla tastiera virtuale. Non riesco a ottenere la tastiera virtuale Premere il tasto premuto per nascondere la tastiera. Da un altro pulsante, funziona perfettamente conNascondi la tastiera virtuale su Done Keypress in Android?

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

ma l'onKeyListener non funziona nel modo desiderato. Quando clicco su editText, la tastiera virtuale appare e il suo contenuto viene cancellato dai caratteri.

Grazie per l'ascolto!

Il main.xml:

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

Il file 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(""); 
    } 
}; 

Il metodo di lavoro utilizzando un pulsante (nello stesso file 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); 
    } 
}; 

Edit : Quando premo il tasto no "9" la tastiera si nasconde. È strano.

risposta

25

utilizzare Android: imeOptions = "actionDone", così:

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

Funziona come un fascino! :) –

+2

non funziona per me, davvero strano nella cosiddetta programmazione Android. –

+1

Quando l'editext è in una vista a scorrimento, è un bug. –

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

con contesto essendo la vostra attività.

+1

Grazie per il vostro impegno! Ho cambiato l'if-statement su if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) che lo ha reso funzionante con l'attributo xml android: inputType = "phone". Salverò la tua risposta fino al prossimo problema con la tastiera morbida. BR - –

4

Modificata l'istruzione if in if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) ha funzionato con l'attributo xml android:inputType="phone".

1

si dovrebbe avere uno sguardo a setOnEditorActionListener() per l'EditText:

Impostare un ascoltatore speciale di essere chiamato quando viene eseguita un'azione sulla vista testo. Questo verrà chiamato quando si preme il tasto Invio o quando l'azione viene fornita all'utente.

0

Usa sotto codice con android:imeOptions="actionDone" suo lavoro per me.

<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" /> 
Problemi correlati