如何让 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 属性更改设置的变体,但均无济于事:
我只能在没有触发 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 工作的主要内容,如果未能解决你的问题,请参考以下文章
Android EditText imeOptions使actionSearch像actionDone一样?