android - 如何让 EditText、IME Action、textMultiLine 为 JellyBean 工作

标签 android android-widget android-4.2-jelly-bean ime

我遇到了很多难题,但未能找到解决方案。显然,JellyBean 改变了 IME 操作的处理方式。我发现许多网站提供的解决方案确实有效,但仅适用于单行 EditTexts。示例:Stackoverflow: onEditorAction

我的 EditText 小部件在 JellyBean 之前工作得很好。它会正确换行,直到用户点击“完成”(返回)键。然后它会使用 OnEditorActionListener 捕获事件并进行相应处理。我已尝试使用以下 XML 属性更改设置的多种变体均无济于事:

  • 单行
  • 水平滚动
  • 输入类型
  • ime选项

我只能在没有触发 onEditorAction 事件或没有触发 onEditorAction 事件的情况下进行自动换行。如何为 JellyBean 实现自动换行并同时处理软键盘输入键?

更新 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>

关于android - 如何让 EditText、IME Action、textMultiLine 为 JellyBean 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13239225/

相关文章:

java - 如何在Android MainActivity之外的另一个类中使用mQueue?

Android NumberPicker 不保存 EditText 更改

android - 如何以编程方式将 9 补丁图像重新应用到 ImageView?

android - Gmail Composer Jelly Bean 的 ActivityNotFoundException 异常

java - 空白 Activity 直到线程完成

android - RecyclerView 在插入时滚动

Android 重新连接调试器

android,这是使用 MyLocationOverlay 获取用户位置以将其发送到服务器的正确方法吗...?

android - 什么是推荐的 Android 实用程序类集合?

android - 使用 Android 4.1 钥匙串(keychain)