EditText支持多行同时支持imeOptions设置

问题描述:EditText一旦设置了多行显示,键盘总是显示Enter键。有时候我们只需要文本输入多行显示,Enter键任然需要支持imeOptions设置,比如显示完成键而不是回车换行。如这如何做呢?

问题分析以及解决:我们知道,当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键无法显示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值