Android EditText 实现强制性弹出只能输入英文的键盘

编程入门 行业动态 更新时间:2024-10-12 03:24:42

Android EditText 实现强制性弹出只能输入<a href=https://www.elefans.com/category/jswz/34/1769696.html style=英文的键盘"/>

Android EditText 实现强制性弹出只能输入英文的键盘

    如果 EditText 控件不做任何特殊处理,例如笔者手机默认弹出的是百度输入法的软键盘,可实现中英文切换,并且自带英文单词智能联想功能(与系统安装输入法和设置相关)。但在某些应用场景下,例如在英语APP里练习英文句子听写,需要实现:

默认弹出只能输入英文的键盘,不允许切换到中文输入键盘,屏蔽输入法的智能联想功能。

    下面直接给出答案:

方式1:EditText 属性:

android:inputType="textVisiblePassword | textMultiLine"

方式2:代码实现

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD | InputType.TYPE_TEXT_FLAG_MULTI_LINE);

解释:

    因为 EditText 的属性设置里并没有一个专门设置只能弹出英文键盘的功能 。(注意区分:android:digits="abcd...xyz 123456789" 这个只能实现输入内容的过滤)

    textVisiblePassword InputType.TYPE_TEXT_VARIATION_NORMAL 的字面意思是“输入密码可见”的意思,虽然与“只限英文输入”的需求实现并不对应,但是却“歪打正着”地实现了我们的需求,但是如果只添加此属性,却又无法输入多行文本(按回车键也不行),所以还需添加属性 textMultiLine 或 InputType.TYPE_TEXT_FLAG_MULTI_LINE。

笔者使用的是华为手机,所以采用上面的方式弹出的是一个只能输入英文的华为安全键盘。

疑问:

    那为什么第二个方法还需要添加一个 InputType.TYPE_CLASS_TEXT 呢?比第一个方法多设置了一个属性。经过笔者测试,如果不添加该属性,如下:

setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD | InputType.TYPE_TEXT_FLAG_MULTI_LINE);

    虽然从效果上看,确实能实现只弹出英文键盘的目的,但还是无法输入多行文本,尽管我们特地还添加了一个“TYPE_TEXT_FLAG_MULTI_LINE”属性。后面查看相关属性值的文档就明白了,在EditText 的 XML布局文件里点击 InputType 的对应的链接,进入到 attrs.xml 文件,找到 textVisiblePassword

<!-- Text that is a password that should be visible.  Corresponds to
{@link android.text.InputType#TYPE_CLASS_TEXT} |
{@link android.text.InputType#TYPE_TEXT_VARIATION_VISIBLE_PASSWORD}. -->
<flag name="textVisiblePassword" value="0x00000091" />

    看到了吗?textVisiblePassword 的值为 0x00000091,而且写的非常清楚的,它是:TYPE_CLASS_TEXT 与 TYPE_TEXT_VARIATION_VISIBLE_PASSWORD 两者二进制“或运算”的结果。两个属性值得二进制值分别为:0x00000001 和 0x00000090,两者的或运算就等于0x00000091。

    /*** Variation of {@link #TYPE_CLASS_TEXT}: entering a password, which should* be visible to the user.*/public static final int TYPE_TEXT_VARIATION_VISIBLE_PASSWORD = 0x00000090;
    /*** Class for normal text.  This class supports the following flags (only* one of which should be set):* {@link #TYPE_TEXT_FLAG_CAP_CHARACTERS},* {@link #TYPE_TEXT_FLAG_CAP_WORDS}, and.* {@link #TYPE_TEXT_FLAG_CAP_SENTENCES}.  It also supports the* following variations:* {@link #TYPE_TEXT_VARIATION_NORMAL}, and* {@link #TYPE_TEXT_VARIATION_URI}.  If you do not recognize the* variation, normal should be assumed.*/public static final int TYPE_CLASS_TEXT = 0x00000001;

所以,方式二相对方式一,在用代码实现时,需要多加一个属性:TYPE_CLASS_TEXT。

另外:

    如果你只是想“优先”弹出英文键盘,但还是允许可以切换到中文输入法,可以做下面的设置:

InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_NORMAL

最后:

    如果真的想完全掌控键盘的一切,那就定制一款英文键盘吧,这个虚拟软键盘可以自主定义全部的字母和数字,包括他们的布局和事件监听等。

自定义软键盘,请参考:.html

更多推荐

Android EditText 实现强制性弹出只能输入英文的键盘

本文发布于:2023-11-16 09:06:49,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1615096.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:英文   弹出   强制性   键盘   Android

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!