我正在使用带有物理硬件键盘的Android设备。
屏幕上有两个WKWebView
(零件号和数量)和两个EditTexts
(重置并保存)。
键入用户数量后,他们想通过物理键盘按 Enter 键来触发“保存”功能。
我当前的“保存”功能会将数据保存到文件并清除屏幕上的数据,并将焦点设置为零件号。
我的Buttons
似乎一经使用就没有返回True,而是触发了另一个Enter键,将光标移动到“数量”字段(右边,它应该留在“零件号”字段中)。
我以为返回True将指示此Enter键已被使用,我理解正确吗?
我的两个onKeyListener
直接放在EditText
下(而不是在任何子布局下)。
知道我的代码哪里出错了吗?
以下是我的布局代码。
ConstraintLayout
下面是我的Java代码。
这在onCreate方法中。
<EditText
android:id="@+id/etPart"
android:layout_width="200dp"
android:maxLength="20"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:maxLines="1"
android:inputType="text"
android:imeOptions="actionNext"
app:layout_constraintLeft_toRightOf="@+id/tvPart"
app:layout_constraintTop_toTopOf="parent"/>
<EditText
android:id="@+id/etQty"
android:layout_width="100dp"
android:maxLength="5"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:inputType="number"
android:maxLines="1"
android:imeOptions="actionDone"
app:layout_constraintLeft_toRightOf="@+id/tvQty"
app:layout_constraintTop_toBottomOf="@id/etPart"
android:nextFocusDown="@id/etPart"/>
这是功能。
etQty.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int i, KeyEvent keyEvent) {
if(i == KeyEvent.KEYCODE_ENTER){
saveData(null);
// I tried to use return true here, sames result, no different.
}
return false;
}
});
答案 0 :(得分:0)
这通常是由软键盘引起的,您可以尝试使用此代码吗?
etPart.requestFocus();
final InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.restartInput(etPart);
imm.showSoftInput(etPart, 0);
答案 1 :(得分:0)
与专家确认后,我了解到我也需要处理Action Up(Key Up)。
下面是工作代码。
etQty.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int i, KeyEvent keyEvent) {
if(i == KeyEvent.KEYCODE_ENTER && keyEvent.getAction() == KeyEvent.ACTION_UP){
saveData(null);
return true;
}
return false;
}
});