Trong khi hầu hết mọi người đã trả lời câu hỏi trực tiếp, tôi muốn giải thích thêm về khái niệm đằng sau nó. Đầu tiên, tôi bị thu hút bởi sự chú ý của IME khi tôi tạo một Hoạt động đăng nhập mặc định. Nó tạo ra một số mã cho tôi bao gồm:
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/prompt_password"
android:imeActionId="@+id/login"
android:imeActionLabel="@string/action_sign_in_short"
android:imeOptions="actionUnspecified"
android:inputType="textPassword"
android:maxLines="1"
android:singleLine="true"/>
Bạn đã quen thuộc với thuộc tính inputType. Điều này chỉ thông báo cho Android loại văn bản dự kiến như địa chỉ email, mật khẩu hoặc số điện thoại. Danh sách đầy đủ các giá trị có thể có thể được tìm thấy ở đây .
Tuy nhiên, đó là thuộc tính imeOptions="actionUnspecified"
mà tôi không hiểu mục đích của nó. Android cho phép bạn tương tác với bàn phím bật lên từ dưới màn hình khi văn bản được chọn bằng cách sử dụng InputMethodManager
. Ở góc dưới cùng của bàn phím, có một nút, thông thường là "Tiếp theo" hoặc "Xong", tùy thuộc vào trường văn bản hiện tại. Android cho phép bạn tùy chỉnh điều này bằng cách sử dụng android:imeOptions
. Bạn có thể chỉ định nút "Gửi" hoặc nút "Tiếp theo". Danh sách đầy đủ có thể được tìm thấy ở đây .
Cùng với đó, sau đó bạn có thể nghe cho máy ép vào nút hành động bằng cách định nghĩa một TextView.OnEditorActionListener
cho EditText
phần tử. Như trong ví dụ của bạn:
editText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(EditText v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
//do here your stuff f
return true;
}
return false;
}
});
Bây giờ trong ví dụ của tôi, tôi đã có android:imeOptions="actionUnspecified"
thuộc tính. Điều này hữu ích khi bạn muốn thử đăng nhập người dùng khi họ nhấn phím enter. Trong Hoạt động của bạn, bạn có thể phát hiện thẻ này và sau đó thử đăng nhập:
mPasswordView = (EditText) findViewById(R.id.password);
mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
if (id == R.id.login || id == EditorInfo.IME_NULL) {
attemptLogin();
return true;
}
return false;
}
});