したがって、問題は EditText の「入力」タイプに関係する必要はなく、キーボードからのキー押下イベントに関係しているように見えます....
したがって、「うまくいけば」これで問題が解決するはずです(「スペース」ボタンが押されてから「次の」イベントを「スキップ」することにより)。
// do for both EditText(s)
editText1.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
log.d("main","KeyPress:"+ actionID);
if (event != null ) { log.d("main","KeyPress:" + event.getKeyCode() ); }
if ( actionId == EditorInfo.IME_ACTION_NEXT) {
// do 'nothing' or 'add a space' if you want that
return true;
}
return false;
}
});
これはおそらく起こっていることです (XML なしではわかりにくい)
だから私はあなたがパターンを理解するのに役立つ何かを見つけました+おそらくそれを解決することにつながります... https://stackoverflow.com/a/17990096から
XML (または同等のコード) に設定がある場合、android:nextFocus....
および/または物理キーボードの「スペース」もIME_ACTION_NEXT (またはそれに類似した別の IME アクション) を通知している場合
問題の原因が IME アクションでない場合は、EditorInfo.IME_ACTION_NEXT
これを試すことができます...何が原因かを判断します。
から: https://stackoverflow.com/a/4171427
PHYSICALキーボードがある場合は、keyDown イベントを検出して適切に処理するために使用できます。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
log.d("main","KeyPress:" + keyCode);
if (event != null ) { log.d("main","KeyPress:" + event.getKeyCode() ); }
// if you want to 'handle' the keyPess here, best to use switch like below
// switch (keyCode) {
// case KeyEvent.KEYCODE_A:
// {
// //your Action code
// return true;
// }
/// }
return super.onKeyDown(keyCode, event);
}
しかし...ソフトウェアキーボードを使用している場合は、addTextChangedListener/TextWatcherを使用する必要があります物理的なキーの押下はEditTextによって「食べられる」ためです(別の投稿で見たものからですが、私のテストでは正しいようです.)
mMyEditText.addTextChangedListener(new TextWatcher()
{
public void afterTextChanged(Editable s)
{
}
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
/*This method is called to notify you that, within s, the count characters beginning at start are about to be replaced by new text with length after. It is an error to attempt to make changes to s from this callback.*/
}
public void onTextChanged(CharSequence s, int start, int before, int count)
{
}
);
「スペース」が入力されたときの EditText の動作をオーバーライドできます。
これは「ソフトウェア キーボード」の場合はかなり簡単に思えますが、物理キーボードは少し難しいようです。
https://developer.android.com/reference/android/widget/TextView.OnEditorActionListener.html
この質問に似ています (ただし、「入力」ではなく「スペース」) Android - EditText で「入力」を処理します
これは、変更されるフォーカスの「パターン」を判断するのに役立ちます。ランダムかどうか (ほとんどの場合 - ランダムではありませんが、調べると「興味深い」可能性があります)
http://developer.android.com/reference/android/view/View.OnFocusChangeListener.html
// try this to see
View.OnFocusChangeListener changeListener = new View.OnFocusChangeListener()
{
@Override
public void onFocusChange(View v, boolean hasFocus) {
log.d("YourClassName", "FocusChanged" + hasFocus)
}
};
EditText1.setOnFocusChangeListener(changeListener);
EditText2.setOnFocusChangeListener(changeListener);
Button.setOnFocusChangeListener(changeListener);
// ... etc... (add to views to see if there is pattern)