Gdy mój użytkownik naciśnieEnterna wirtualnym wpisie „wżis Użytkownik zatwierdza!” klawiatura moja klawiatura pozostanie widoczna! (Czemu?)
À propos de Java ...
private void initTextField() {
entryUser = (EditText) findViewById(R.id.studentEntrySalary);
entryUser.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_ENTER:
userValidateEntry();
return true;
}
}
return true;
}
});
}
private void userValidateEntry() {
System.out.println("user validate entry!");
}
... tutaj mój widok
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:layout_width="wrap_content" Android:layout_height="wrap_content">
<EditText Android:id="@+id/studentEntrySalary" Android:text="Foo" Android:layout_width="wrap_content" Android:layout_height="wrap_content" />
</LinearLayout>
Moe coś nie tak na moim wirtualnym urządzeniu?
Cela devrait le faire:
yourEditTextHere.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event) {
if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// NOTE: In the author's example, he uses an identifier
// called searchBar. If setting this code on your EditText
// then use v.getWindowToken() as a reference to your
// EditText is passed into this callback as a TextView
in.hideSoftInputFromWindow(searchBar
.getApplicationWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
userValidateEntry();
// Must return true here to consume event
return true;
}
return false;
}
});
Conservez singleLine = "true" et ajoutez imeOptions = "actionDone" à EditText . Ensuite, dans OnEditorActionListener, vérifiez si actionId == EditorInfo.IME_ACTION_DONE, de la même manière (mais modifiez-le selon votre implémentation):
if (actionId == EditorInfo.IME_ACTION_DONE) {
if ((username.getText().toString().length() > 0)
&& (password.getText().toString().length() > 0)) {
// Perform action on key press
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(username.getWindowToken(),
0);
doLogin();
}
}
Si vous faites de la zone de texte une seule ligne (je crois que la propriété s'appelle SingleLine dans les fichiers XML de mise en page), elle sortira du clavier lors de la saisie.
Ici vous allez: http://developer.Android.com/reference/Android/R.styleable.html#TextView_singleLine
Je crée un composant personnalisé qui étend AutoCompleteTextView, comme dans l'exemple ci-dessous:
public class PortugueseCompleteTextView extends AutoCompleteTextView {
...
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (event != null && (event.getKeyCode() == KeyEvent.KEYCODE_BACK)) {
InputMethodManager inputManager =
(InputMethodManager) getContext().
getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(
this.getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
}
return super.onKeyPreIme(keyCode, event);
}
J'utilise ce code dans AlertDialog.Builder, mais il est possible d'utiliser to Activity.
ajoutez simplement cette ligne dans votre texte de montage.
Android:imeOptions="actionDone"'
vous pouvez spécifier le prochain identifiant de texte d'édition à déplacer sur ce texte d'édition en cliquant sur le bouton Clavier.