我遇到了很多难题,无法找到解决方案。显然,JellyBean更改了IME操作的处理方式。我发现许多网站都提供了确实有效的解决方案,但仅适用于单行EditTexts
。示例:Stackoverflow: onEditorAction
我的EditText
小部件在JellyBean之前运行良好。它将自动换行,直到用户按下“完成”(返回)键。然后,它将使用OnEditorActionListener
捕获事件并进行相应处理。我尝试使用以下XML属性更改设置的多种变体无济于事:
我只能在不触发onEditorAction事件的情况下进行换行,或者在onEditorAction事件触发的情况下不进行换行。如何为JellyBean换行并同时处理软键盘的Enter键?
更新1:包括请求的代码。请注意,这就是现在的样子,它适用于除JellyBean之外的所有平台。如前所述,尝试了多种不同的XML设置均无济于事。
更新2:设法保留了运行JellyBean 4.1.1的Asus Transformer。工作良好。那么,也许这是设备特定的错误?我的另一个JellyBean设备是运行4.1.2的Nexus 7。任何人都可以通过其他设备进行验证吗?
代码:
private class OnMyEditorActionListener implements OnEditorActionListener {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_GO) {
doSomething();
return true;
}
return false;
}
}
<EditText
android:id="@+id/editbox_box_et"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@null"
android:gravity="top|center_horizontal"
android:imeOptions="actionGo"
android:inputType="textMultiLine|textNoSuggestions"
android:padding="@dimen/spacing_half"
android:textSize="24sp" >
</EditText>
最佳答案
自己提供一个ID到您的“提交/执行”按钮
Activity 中:
private class OnMyEditorActionListener implements OnEditorActionListener {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == R.id.your_new_ID || actionId == EditorInfo.IME_Null) {
doSomething();
return true;
}
return false;
}
}
在xml 中:
<EditText
android:id="@+id/editbox_box_et"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@null"
android:gravity="top|center_horizontal"
android:inputType="textMultiLine|textNoSuggestions"
android:padding="@dimen/spacing_half"
android:textSize="24sp"
android:imeActionId="@+id/your_new_ID"
android:imeActionLabel="Go"> </EditText>