web-dev-qa-db-fra.com

zestaw Android ukrył klawiaturę po naciśnięciu enter (w EditText)

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?

27
Martin Magakian

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;
        }
    });
68
jqpubliq

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();
                }
            }
18
Micha Okkerman

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

5
Hans

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.

1
Ricardo Ruas

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.

0
Satyajit Das