tôi thấy rằng "hành vi lỗi giống như" tôi là do imeActionLabel
điều phức tạp. Tôi chỉ sử dụng nó bởi vì nó đã được đề cập trong các Text Fields Guide như một cách để có một nhãn chìa khóa trở lại tùy chỉnh. Dưới đây là kết quả kiểm tra của tôi trong Lollipop,
Trường hợp 1: mặc định, trở về chính biểu tượng = đóng góc khung
<EditText
android:singleLine="true"
android:inputType="textUri"/>
onEditorAction được gọi một lần.
- KeyEvent = null, actionId = 5 =
EditorInfo.IME_ACTION_NEXT
- nếu trở thành sự thật, con trỏ vẫn trong EditText, bàn phím mở
- nếu trở lại sai, con trỏ di chuyển đến tiếp theo có thể đặt tiêu, bàn phím mở nếu cần thiết
Trường hợp 2:imeOptions
, trở về biểu tượng key = dấu kiểm
<EditText
android:singleLine="true"
android:inputType="textUri"
android:imeOptions="actionDone"/>
onEditorAction được gọi một lần.
- KeyEvent = null, actionId = 6 =
EditorInfo.IME_ACTION_DONE
- nếu trở thành sự thật, con trỏ vẫn trong EditText, bàn phím mở
- nếu trở lại sai, con trỏ vẫn trong EditText, bàn phím đóng
Trường hợp 3:imeActionLabel
, trở về chính biểu tượng = "URdone"
<EditText
android:singleLine="true"
android:inputType="textUri"
android:imeOptions="actionDone"
android:imeActionLabel="URdone"/>
onEditorAction có thể được gọi nhiều hơn một lần.
KeyEvent = null, actionId = 0
- nếu trở thành sự thật, con trỏ vẫn trong EditText, bàn phím mở, onEditorAction KHÔNG gọi lần thứ hai
- nếu trả về false, onEditorAction được gọi là thời gian SECOND:
KeyEvent = KeyEvent.ACTION_DOWN
, actionId = 0
- nếu trả về false, con trỏ di chuyển đến tiếp theo đặt tiêu điểm, bàn phím mở nếu cần thiết, onEditorAction KHÔNG gọi lần thứ ba
- nếu trở thành sự thật, onEditorAction được gọi là thời gian BA :
KeyEvent = KeyEvent.ACTION_UP
, actionId = 0
- nếu trở thành sự thật, con trỏ vẫn trong EditText, bàn phím mở
- nếu trả về false, con trỏ di chuyển đến tiếp theo đặt tiêu điểm, bàn phím mở nếu cần thiết
GHI CHÚ:
Tôi không chắc liệu actionId = 0 có phải là từ EditorInfo.IME_ACTION_UNSPECIFIED
hoặc EditorInfo.IME_NULL
.
Nếu tiêu điểm tiếp theo là không thể chỉnh sửa, biểu tượng chìa khóa trả về sẽ trở thành mũi tên chỉ sang trái.
Bạn cũng có thể sử dụng setOnFocusChangeListener
để ghi đè onFocusChange
, sẽ được gọi theo hành vi con trỏ ở trên.
Vui lòng sử dụng thẻ 'android-edittext' thay vì' edittext' :) –
'sự kiện' chắc chắn đôi khi là' null', quay lại ít nhất là Honeycomb. Đây là một dự án mẫu cho thấy cách tôi sử dụng 'onEditorAction()': https://github.com/commonsguy/cw-omnibus/tree/master/ActionBar/ActionBarDemo – CommonsWare
@CommonsWare Tôi đã thử ví dụ của bạn: –