私の「虫のような振る舞い」は、imeActionLabel物事を複雑にすることによるものであることがわかりました。カスタムリターンキーラベルを作成する方法としてテキストフィールドガイドに記載されているため、これを使用しただけです。これがロリポップでの私のテストの結果です、
ケース1:デフォルト、リターンキーシンボル=閉じ角かっこ
<EditText
android:singleLine="true"
android:inputType="textUri"/>
onEditorActionは1回呼び出されます。
- KeyEvent = null、actionId = 5 =
EditorInfo.IME_ACTION_NEXT
- trueを返すと、カーソルはEditTextのままになり、キーボードが開きます
- falseを返すと、カーソルは次のフォーカス可能な位置に移動し、必要に応じてキーボードを開きます
ケース2 imeOptions:、リターンキーシンボル=チェックマーク
<EditText
android:singleLine="true"
android:inputType="textUri"
android:imeOptions="actionDone"/>
onEditorActionは1回呼び出されます。
- KeyEvent = null、actionId = 6 =
EditorInfo.IME_ACTION_DONE
- trueを返すと、カーソルはEditTextのままになり、キーボードが開きます
- falseを返すと、カーソルはEditTextに残り、キーボードは閉じます
ケース3 imeActionLabel:、リターンキーシンボル="URdone"
<EditText
android:singleLine="true"
android:inputType="textUri"
android:imeOptions="actionDone"
android:imeActionLabel="URdone"/>
onEditorActionは複数回呼び出すことができます。
KeyEvent = null、actionId = 0
- trueを返すと、カーソルはEditTextに留まり、キーボードが開いたままになり、onEditorActionは2回呼び出されません。
- falseを返す場合、onEditorActionは2番目の時間と呼ばれます。
KeyEvent = KeyEvent.ACTION_DOWN、actionId = 0
- falseを返すと、カーソルは次のフォーカス可能な場所に移動し、必要に応じてキーボードを開きます。onEditorActionは3回呼び出されません。
- trueを返す場合、onEditorActionは3回目と呼ばれます。
KeyEvent = KeyEvent.ACTION_UP、actionId = 0
- trueを返すと、カーソルはEditTextのままになり、キーボードが開きます
- falseを返すと、カーソルは次のフォーカス可能な位置に移動し、必要に応じてキーボードを開きます
ノート:
actionId=0がfromEditorInfo.IME_ACTION_UNSPECIFIEDまたは。かどうかはわかりませんEditorInfo.IME_NULL。
次のフォーカス可能オブジェクトが編集不可の場合、リターンキー記号は左向きの矢印になります。
setOnFocusChangeListenerをオーバーライドするために使用することもできますonFocusChange。これは、上記のカーソルの動作に従って呼び出されます。