EditText支持多行同时支持imeOptions设置
2015-12-22 13:13
225 查看
问题描述:EditText一旦设置了多行显示,键盘总是显示Enter键。有时候我们只需要文本输入多行显示,Enter键任然需要支持imeOptions设置,比如显示完成键而不是回车换行。如这如何做呢?
问题分析以及解决:我们知道,当EditText弹出输入法时,会调用方法
public InputConnection onCreateInputConnection(EditorInfo outAttrs)来创建和输入法的连接,设置输入法的状态,包括显示什么样的键盘布局。需要注意的地方是这部分代码:
发现,当EditText的inputType包含textMultiLine标志位,会强迫imeOptions加上IME_FLAG_NO_ENTER_ACTION位,这导致了只显示Enter键。
解决方法:我们可以继承EditText类,覆写onCreateInputConnection方法,如下:
存在的问题,这样做会使得Enter键无法显示。
问题分析以及解决:我们知道,当EditText弹出输入法时,会调用方法
public InputConnection onCreateInputConnection(EditorInfo outAttrs)来创建和输入法的连接,设置输入法的状态,包括显示什么样的键盘布局。需要注意的地方是这部分代码:
if ((outAttrs.inputType & (InputType.TYPE_MASK_CLASS | InputType.TYPE_TEXT_FLAG_MULTI_LINE)) == (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE)) { // Multi-line text editors should always show an enter key. outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_ENTER_ACTION; }
发现,当EditText的inputType包含textMultiLine标志位,会强迫imeOptions加上IME_FLAG_NO_ENTER_ACTION位,这导致了只显示Enter键。
解决方法:我们可以继承EditText类,覆写onCreateInputConnection方法,如下:
public InputConnection onCreateInputConnection(EditorInfo outAttrs) { //这里调用父类方法来初始化必要部分 InputConnection connection = super.onCreateInputConnection(outAttrs); if (connection == null) return null; //移除EditorInfo.IME_FLAG_NO_ENTER_ACTION标志位 outAttrs.imeOptions &= ~EditorInfo.IME_FLAG_NO_ENTER_ACTION; return connection; }
存在的问题,这样做会使得Enter键无法显示。
相关文章推荐
- 一个简单统计时间间隔的shell脚本Demo
- JMeter:Linux上安装&运行JMeter
- tomcat实现SSL配置
- VM VirtualBox安装Centos6.5
- Apache日志分析代码大全
- Linux经常使用命令
- openssl配置
- 每天一个Linux命令(1) ls
- Linux常用操作命令
- CentOS 6 用SVN自动提交文件到web服务器
- shell中seq运用
- 详解Linux系统中安装配置Samba服务器的步骤
- CentOS代理设置
- 【笔记】Linux shell脚本编程
- scope的使用场景和说明
- Linux命令行技巧
- 通过Google身份验证器加强Linux帐户安全
- CentOS关闭防火墙&SELinux
- linux配置java环境变量(详细)
- 快速掌握htop