如何让 EditText、IME 操作、textMultiLine 为 JellyBean 工作

Posted

技术标签:

【中文标题】如何让 EditText、IME 操作、textMultiLine 为 JellyBean 工作【英文标题】:How to get EditText, IME Action, textMultiLine, to work for JellyBean 【发布时间】:2012-10-25 17:00:55 【问题描述】:

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

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

单行 水平滚动 输入类型 imeOptions 行

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

更新 1: 包括请求的代码。请注意,这是它现在的状态,适用于除 JellyBean 之外的所有平台。正如我之前所说,尝试了多种不同的 XML 设置均无济于事。

更新 2: 设法获得了运行 JellyBean 4.1.1 的华硕变压器。工作正常。所以也许这是一个特定于设备的错误?我的另一个 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_
    android:layout_
    android:background="@null"
    android:gravity="top|center_horizontal"
    android:imeOptions="actionGo"
    android:inputType="textMultiLine|textNoSuggestions"
    android:padding="@dimen/spacing_half"
    android:textSize="24sp" >
</EditText>

【问题讨论】:

这可能有助于显示代码以及您的构建目标是什么。 包含代码。目标是果冻豆。 【参考方案1】:

您自己为您的提交/执行按钮提供一个 ID

活动中

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_
    android:layout_
    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>

【讨论】:

这其实很有用,解决了我的问题。如果可以的话,我会给你一块饼干。 这似乎工作正常。多行功能被保留,现在由我来标记和处理我想要的输入键。轻巧有效。在***.com/questions/5014219/… 中还有一些与同一问题相关的修复【参考方案2】:

尝试以下方法:

android:inputType="text"
android:imeOptions="actionNone"

还可以在 imeOptions xml 文件中查看不同的自动换行选项

【讨论】:

否定。文本,actionNone 不起作用。我已经尝试了 text、textMultiLine 和 textImeMultiLine 的多种变体。连同 actionNone、actionGo、actionDone 和 flagNoEnterAction。 Nexus 7 上似乎没有任何效果【参考方案3】:

经过大量测试,我确定这是 Nexus 7 特有的错误,我无法通过任何代码来解决它。有趣的是,如果我从 Google Play 下载不同的键盘,那么代码实际上可以工作!

【讨论】:

附加说明:似乎软键盘创建者并没有强制支持 ime 选项。这可以解释为什么它们不会出现在某些键盘上。所以我想依赖这些作为应用程序的一个组成部分并不是一个好主意。【参考方案4】:

尝试使用整数值添加属性android:imeActionId(actionGo 为 2)。 http://developer.android.com/reference/android/widget/TextView.html#attr_android:imeOptions

【讨论】:

【参考方案5】:

我在为 Jelly Bean 4.1.2 触发事件时遇到问题。添加输入类型对我有帮助。

android:imeOptions="actionGo"
android:inputType="text"

【讨论】:

不允许自动换行。

以上是关于如何让 EditText、IME 操作、textMultiLine 为 JellyBean 工作的主要内容,如果未能解决你的问题,请参考以下文章

如何让另外两个或两个以上数字的单一的EditText?

Android中EditText的掩码

android怎样控制输入法的弹出和隐藏

Android EditText imeOptions使actionSearch像actionDone一样?

从InputConnection获取EditText中的所有文本的更好方法是什么?

android 如何让edittext控件显示边框