我遇到了几个并存的EditText组件的问题(它们是RelativeLayout的子组件)。
<EditText
android:id="@+id/num1"
android:layout_width="40dp"
android:layout_height="40dp"
android:maxLength="1"
android:inputType="number"
android:textColor="@color/textColor"
android:gravity="center"
android:focusableInTouchMode="true"
android:focusable="true"
/>
<EditText
android:id="@+id/num2"
android:layout_width="40dp"
android:layout_height="40dp"
android:maxLength="1"
android:layout_toEndOf="@id/num1"
android:layout_marginStart="10dp"
android:inputType="number"
android:textColor="@color/textColor"
android:gravity="center"
android:focusableInTouchMode="true"
android:focusable="true"
/>
<EditText
android:id="@+id/num3"
android:layout_width="40dp"
android:layout_height="40dp"
android:maxLength="1"
android:layout_toEndOf="@id/num2"
android:layout_marginStart="10dp"
android:inputType="number"
android:textColor="@color/textColor"
android:gravity="center"
android:focusableInTouchMode="true"
android:focusable="true"
/>
此外,以下是尝试将焦点从num1组件更改为num2组件的相关代码,但实际上会发生的情况是焦点从num1变为num3:
final EditText etLastNumber1 = (EditText) findViewById(R.id.num1);
final EditText etLastNumber2 = (EditText) findViewById(R.id.num2);
etLastNumber1.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (Misc.IsKeyCodeNumber(keyCode)) {
etLastNumber1.clearFocus();
etLastNumber2.requestFocus();
return false;
}
return true;
}
});
我尝试了相同代码的不同变体,包括不使用clearFocus和/或始终返回true。此外,父布局使用descendantFocusability = beforeDescendants和focusableInTouchMode = true。
如何解决此问题?
答案 0 :(得分:2)
尝试其中一个:
android:nextFocusDown="@+id/.."
android:nextFocusLeft="@+id/.."
android:nextFocusRight="@+id/.."
android:nextFocusUp="@+id/.."
示例:
<EditText
android:id="@+id/num1"
android:layout_width="40dp"
android:layout_height="40dp"
android:maxLength="1"
android:inputType="number"
android:textColor="@color/textColor"
android:gravity="center"
android:focusableInTouchMode="true"
android:focusable="true"
android:nextFocusDown="@+id/num2"
/>
答案 1 :(得分:0)
好的,经过几周的Android应用程序开发其他方面后,我已经回到了这个问题,我找到了解决这个问题的方法。
问题主要是在输入和聚焦组件期间可能发生的关键事件的上下文。
那就是说,我已经在OnKeyListener方法中添加了突出显示的条件:
if (event.getAction() != KeyEvent.KEYCODE_SOFT_LEFT && event.getAction() != KeyEvent.KEYCODE_SOFT_RIGHT && Misc.IsKeyCodeNumber(keyCode)) {
}