本文出自:http://blog.sina.com.cn/s/blog_97eedec40100wwjd.html
问题描述:EditText一旦设置了多行显示,键盘总是显示Enter键。有时候我们只需要文本输入多行显示,Enter键任然需要支持imeOptions设置,比如显示完成键而不是回车换行。如这如何做呢?
问题分析以及解决:我们知道,当EditText弹出输入法时,会调用方法(TextView$onCreateInputConnection)
public InputConnection onCreateInputConnection(EditorInfo outAttrs)来创建和输入法的连接,设置输入法的状态,包括显示什么样的键盘布局。需要注意的地方是这部分代码:
if (isMultilineInputType(outAttrs.inputType)) {
// Multi-line text editors should always show an enter key.
outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_ENTER_ACTION;
}
private static boolean isMultilineInputType(int type) {
return (type & (EditorInfo.TYPE_MASK_CLASS | EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE)) ==
(EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE);
}
发现,当EditText的inputType包含textMultiLine标志位,会强迫imeOptions加上IME_FLAG_NO_ENTER_ACTION位,这导致了只显示Enter键。
解决方法:我们可以继承EditText类,覆写onCreateInputConnection方法,如下:
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
InputConnection inputConnection = super.onCreateInputConnection(outAttrs);
if(inputConnection != null){
outAttrs.imeOptions &= ~EditorInfo.IME_FLAG_NO_ENTER_ACTION;
}
return inputConnection;
}
记。