Android EditText关于imeOptions的设置和响应

这篇具有很好参考价值的文章主要介绍了Android EditText关于imeOptions的设置和响应。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Android EditText关于imeOptions的设置和响应,Android进阶,android,android jetpack,android-jetpack

日常开发中,最绕不开的一个控件就是EditText,随之避免不了的则是对其软键盘事件的监听,随着需求的不同对用户输入的软键盘要求也不同,有的场景需要用户输入完毕后,有一个确认按钮,有的场景需要的是回车,有的场景需要用户输入后进入下一项或者搜索,所幸的是,大部分需求场景通过修改原生设置就可满足,只要极少情况下才需要去写自定义键盘。而关于EditText唤起的软键盘中回车的功能可以通过imeOptions的设定来进行相应的设置。

其使用方式仅通过在xml中声明即可:

<EditText
            ...
            android:imeOptions="actionSend"/>

常用属性

如果不特殊声明,右下角按键则为回车键。其常用属性及相应功能设置如下:

属性 右下角按键显示及常见应用场景
actionGo 右下角按键显示“开始”
actionSearch 右下角显示放大镜,对应搜索功能场景
actionSend 右下角按键内容为"发送",一般用于即时聊天页面
actionNext 右下角按键内容为“下一步”或者“下一项”,会跳到下一个EditText
actionDone 右下角按键内容为“完成”
actionNone 无任何提示
flagNoExtractUi 使软键盘不全屏显示,只占用一部分屏幕,右下角按键为默认回车键在指定imeOptions后,还要添加android:inputType="text"属性。

也可以通过代码去设置对应属性,如下:

editText.setInputType(EditorInfo.TYPE_CLASS_TEXT);
editText.setImeOptions(EditorInfo.IME_ACTION_...);

其属性与代码中设置的常量关系为:

属性 对应常量
actionGo EditorInfo.IME_ACTION_GO
actionSearch EditorInfo.IME_ACTION_SEARCH
actionSend EditorInfo.IME_ACTION_SEND
actionNext EditorInfo.IME_ACTION_NEXT
actionDone EditorInfo.IME_ACTION_DONE
actionNone EditorInfo.IME_ACTION_NONE
actionUnspecified(未指定) EditorInfo.IME_ACTION_UNSPECIFIED

监听

对应的EditText可以设置相应的监听,editText.setOnEditorActionListener,在监听的onEditorAction()中通过返回的actionId参数来判断触发的对应事件。例如以下示例:

xml中简单设置一个EditText:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <EditText
        android:id="@+id/edt_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:imeOptions="actionGo"
        android:inputType="text"/>
</RelativeLayout>

对应在Activity中对其进行事件监听:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    EditText mEdtView = findViewById(R.id.edt_view);
    mEdtView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            switch (actionId){
                case EditorInfo.IME_ACTION_DONE:
                    Toast.makeText(MainActivity.this, "IME_ACTION_DONE", Toast.LENGTH_SHORT).show();
                    break;
                case EditorInfo.IME_ACTION_GO:
                    Toast.makeText(MainActivity.this, "IME_ACTION_GO", Toast.LENGTH_SHORT).show();
                    break;
                case EditorInfo.IME_ACTION_NEXT:
                    Toast.makeText(MainActivity.this, "IME_ACTION_NEXT", Toast.LENGTH_SHORT).show();
                    break;
                case EditorInfo.IME_ACTION_NONE:
                    Toast.makeText(MainActivity.this, "IME_ACTION_NONE", Toast.LENGTH_SHORT).show();
                    break;
                case EditorInfo.IME_ACTION_PREVIOUS:
                    Toast.makeText(MainActivity.this, "IME_ACTION_PREVIOUS", Toast.LENGTH_SHORT).show();
                    break;
                case EditorInfo.IME_ACTION_SEARCH:
                    Toast.makeText(MainActivity.this, "IME_ACTION_SEARCH", Toast.LENGTH_SHORT).show();
                    break;
                case EditorInfo.IME_ACTION_SEND:
                    Toast.makeText(MainActivity.this, "IME_ACTION_SEND", Toast.LENGTH_SHORT).show();
                    break;
                case EditorInfo.IME_ACTION_UNSPECIFIED:
                    Toast.makeText(MainActivity.this, "IME_ACTION_UNSPECIFIED", Toast.LENGTH_SHORT).show();
                    break;
                default:
                    break;
            }
            return true;
        }
    });
}

其对应效果为:

Android EditText关于imeOptions的设置和响应,Android进阶,android,android jetpack,android-jetpack

对应吐司也验证了我们代码的运行,我们再在xml中删除对应属性,用代码的形式声明试试。

xml中:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <EditText
        android:id="@+id/edt_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:inputType="text"/>
</RelativeLayout>

可见,其余无变动,对应activity的修改则是在设置监听前设置对应属性:

...
mEdtView.setImeOptions(EditorInfo.IME_ACTION_SEND);
...

其效果为:

Android EditText关于imeOptions的设置和响应,Android进阶,android,android jetpack,android-jetpack

可见,代码中设置效果则一样,也许你会疑问,为什么点击右下角按键后还不能收起软键盘,系统中是没有这样主动行为的,需要我们自己来调用以下方法即可:

InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(context.getWindow().getDecorView().getWindowToken(), 0);

重复响应问题

这里需要注意的是,onEditorAction中,如果返回的是false,则onEditorAction中的代码可能会调用两次,原因不难理解,系统会首先判断用户实现的方法onEditorActionListener.onEditorAction(this, actionCode, null)的返回值,一旦返回true,会立即return,因此系统的处理被直接跳过。

设置无效问题

当设置了android:maxLines=“1” 属性时,有可能出现设置无效问题,这里要改为android:singleLine="true"此属性即可。当然,有可能个别的机型还有其他适配问题,比如三星等等,有遇见的朋友可以留言互相交流。文章来源地址https://www.toymoban.com/news/detail-829877.html

到了这里,关于Android EditText关于imeOptions的设置和响应的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android EditText 获取/失去焦点

    项目的需求中,又一个4位数的验证码界面,小弟才疏学浅,只想到了用 线性布局里面放四个EditText 。 需求需要输入内容后,自动跳到下一个位置聚焦,删除指定位置后,自动跳到上一个位置聚焦,由于聚焦/非聚焦UI展示得都不同,所以每个editText都会频繁的设置焦点变化。

    2024年02月03日
    浏览(43)
  • Android 之 EditText (输入框)详解

    上一节中我们学习了第一个 UI控件 TextView(文本框) ,文中给出了很多实际开发中可能遇到的一些需求 的解决方法,应该会为你的开发带来便利,在本节中,我们来学习第二个很常用的控件 EditText(输入框) ; 和TextView非常类似,最大的区别是:EditText可以接受用户输入!和前

    2024年02月11日
    浏览(46)
  • Android 之 监听 EditText 的内容变化

    在前面我们已经学过EditText控件了,本节来说下如何监听输入框的内容变化! 这个再实际开发中非常实用,另外,附带着说下如何实现EditText的密码可见与不可见! 由题可知,是基于监听的事件处理机制,好像前面的点击事件是OnClickListener,文本内容 变化的监听器则是:Te

    2024年02月12日
    浏览(43)
  • Android开发 文本输入 EditText 监听器

    1.EditText 文本编辑框:用户输入文本信息 可以输入的文本类型如下:  常用属性:  系统默认的EditText: 效果图: 当然也可以自定义EditText的背景,比如用selector设定获取焦点时EditText背景的变化。 selector: 其中focus和nofocus都是自定义的shape,分别表示聚焦和没有聚焦时的背景

    2024年02月12日
    浏览(38)
  • Android点击EditText禁止弹出软键盘

    今天做了一个点击EditText获取焦点,不弹出设备系统键盘,只弹出自定义键盘,在网上能查到很多实现这一功能的方法,试了很多,只有一种对我来说是好用的,做个记录方便以后使用 方法一:这个对我来说好用的,也是唯一一个好用的,还会多分享几个网上说的一些好用的

    2024年02月11日
    浏览(35)
  • Android EditText的setOnEditorActionListener方法——监听软键盘按键

    1、控件EditText的setOnEditorActionListener方法的使用 setOnEditorActionListener这个方法,并不是在我们点击EditText的时候触发,也不是在我们对EditText进行编辑时触发,而是在我们编辑完之后点击软键盘上的各种键才会触发。 通过 布局文件 中的imeOptions可以控制软件盘右下角的按钮显示

    2024年02月10日
    浏览(40)
  • Android EditText 屏蔽双击选中、长按选中

    同时屏蔽双击选中 和 长按选中: 只屏蔽长按选中: 双击或长按都是 Touch事件,所以先看EditText的 onTouchEvent 方法,EditText中 没有 onTouchEvent方法,而 class EditText extends TextView ,所以查看TextView 的 onTouchEvent 方法。 updateSelection() -- updateSelectionInternal() -- Selection.setSelection((Spannab

    2024年02月13日
    浏览(50)
  • Android 基础知识4-3.2 EditText(输入框)详解

    一、EditText(输入框)介绍         EditText在开发中也是经常使用的控件,比如,要实现一个登录页面,需要用户输入账号、密码等信息,然后我们或得用户输入的内容,把它交给服务器来判断。因此,这一节我们需要学习如何在布局文件中实现编辑框,然后获得编辑框的

    2023年04月24日
    浏览(41)
  • 关于Android Studio Http Proxy设置

    对敌人最大的蔑视就是沉默。--鹿丸 我们使用Android Studio  开始构建的时候会有卡顿的情况,甚至死机,也就是所谓的【android studio】构建卡住问题,如果依赖库类都是国内的,检查是否开启了代理    这个地方选择下面的自动代理 国内有很多代理可以设置,下面这个亲测有

    2024年02月12日
    浏览(43)
  • android 点击输入框editText后点击textview会弹出软键盘问题解决

    在 Android 中,当一个 EditText 或其它可以输入文本的控件获取焦点时,系统会自动弹出软键盘以便用户输入。当软键盘弹出后,点击其它控件,比如 TextView,也会触发 EditText 失去焦点的事件,从而导致软键盘关闭。这是 Android 系统默认的行为。 但是,在某些情况下,用户希望

    2024年02月15日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包