全面解析Android EditText以及软键盘的设置

原创文章,转载请注明出处:http://blog.csdn.net/myth13141314/article/details/54972337


软键盘的行为可以通过修改对应Activity的android:windowSoftInputMode属性来改变
属性值含义
“stateUnspecified”不指定软键盘的状态(隐藏还是可见)。 将由系统选择合适的状态,或依赖主题中的设置。这是对软键盘行为的默认设置。当我们没有设置android:windowSoftInputMode属性的时候,软件默认采用的就是这种交互方式,系统会根据界面采取相应的软键盘的显示模式。
“stateUnchanged”当 Activity 转至前台时保留软键盘最后所处的任何状态,无论是可见还是隐藏。当前界面的软键盘状态,取决于上一个界面的软键盘状态,无论是隐藏还是显示。
“stateHidden”当用户选择 Activity 时 — 也就是说,当用户确实是向前导航到 Activity,而不是因离开另一 Activity 而返回时 — 隐藏软键盘。当设置该状态时,软键盘总是被隐藏,不管是否有输入的需求。
“stateAlwaysHidden”当 Activity 的主窗口有输入焦点时始终隐藏软键盘。当设置该状态时,软键盘总是被隐藏,和stateHidden不同的是,当我们跳转到下个界面,如果下个页面的软键盘是显示的,而我们再次回来的时候,软键盘就会隐藏起来。
“stateVisible”在正常的适宜情况下(当用户向前导航到 Activity 的主窗口时)显示软键盘。当设置为这个状态时,软键盘总是可见的,即使在界面上没有输入框的情况下也可以强制弹出来出来。
“stateAlwaysVisible”当用户选择 Activity 时 — 也就是说,当用户确实是向前导航到 Activity,而不是因离开另一 Activity 而返回时 — 显示软键盘。当设置为这个状态时,软键盘总是可见的,和stateVisible不同的是,当我们跳转到下个界面,如果下个页面软键盘是隐藏的,而我们再次回来的时候,软键盘就会显示出来。
“adjustUnspecified”不指定 Activity 的主窗口是否调整尺寸以为软键盘腾出空间,或者窗口内容是否进行平移以在屏幕上显露当前焦点。 系统会根据窗口的内容是否存在任何可滚动其内容的布局视图来自动选择其中一种模式。 如果存在这样的视图,窗口将进行尺寸调整,前提是可通过滚动在较小区域内看到窗口的所有内容。这是对主窗口行为的默认设置。
“adjustResize”始终调整 Activity 主窗口的尺寸来为屏幕上的软键盘腾出空间。也就是布局内容会被软键盘顶上去。这个选项不能和adjustPan同时使用,如果这两个属性都没有被设置,系统会根据窗口中的布局自动选择其中一个。
“adjustPan”不调整 Activity 主窗口的尺寸来为软键盘腾出空间, 而是自动平移窗口的内容,使当前焦点永远不被键盘遮盖,让用户始终都能看到其输入的内容。 这通常不如尺寸调正可取,因为用户可能需要关闭软键盘以到达被遮盖的窗口部分或与这些部分进行交互。也就是软键盘会盖住布局内容。

EditText的属性设置

  • 常用的一些属性设置
属性值含义
android:hint设置提示的信息,常见如:“请输入要搜索的内容”等
android:textColorHint设置提示信息的文字颜色,就是上面的hint的颜色
android:maxLines顾名思义就是设置最多显示的行数
android:maxLength控制最大的输入长度
android:focusableInTouchMode设置点击是否能获取焦点,如果设置为false,则点击EditText也获取不到焦点
android:focusable也是设置是否能获取焦点,focusableInTouchMode=”true”,一定会使focusable=“true”;focusable=“false”,一定会使focusableInTouchMode=“false”。所以要使EditText获取不到焦点,设置任意一个为false即可
android:cursorVisible控制光标显示,false则光标不显示,默认为true
android:textCursorDrawable控制光标的颜色,如果设置为“@null”则颜色和text color一样
android:imeOptions可以根据需要设置不同的值来达到不同的效果,如果需要自定义回车的按钮功能必须同时设置android:singleLine=”true”或是设置android:inputType
android:inputType参考:https://developer.android.com/training/keyboard-input/style.html#Action
android:imeOptions的属性含义
属性值效果
“flagNoExtractUi”使软键盘不全屏显示,只占用一部分屏幕
“actionNone”输入法回车键不带任何提示
“actionGo”输入法回车键为“开始”
“actionSearch”输入法回车键为“搜索”
“actionSend”输入法回车键为“发送”
“actionNext”输入法回车键为“下一个”
“actionDone”输入法回车键为“完成”
需要注意的是要想使用回车的按钮功能,必须同时设置android:singleLine=”true”,因为输入法键盘右下角默认的回车键本来就是换行用的,当设置单行后,回车换行就失去作用了,这样就可以设置为搜索、发送、go等等。或是设置android:inputType
设置了android:imeOptions属性以后可以设置ActionListener来监听回车键的事件,以便进行相应的处理
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if (actionId == EditorInfo.IME_ACTION_SEARCH) {//搜索

                    KeyText =  editText.getText().toString().trim();
                    return true;
                }
                return false;
            }
        });
EditText还可以设置监听输入内容的变化
 editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
               //输入前
            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                //输入中
            }

            @Override
            public void afterTextChanged(Editable editable) {
                //输入内容结束以后可以做一些相应的处理
                if ("".equals(editText.getText().toString().trim())) {

                }
            }
        });

延时自动弹出软件盘
  • 需要用到InputMethodManager
public static void showSoftKeyboardLate(final View view) {
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {

            Context context = view.getContext();
            InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
            view.requestFocus();
            imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
            }
        }, 998);
    }
  • 控制软件盘的显示和隐藏
public static void toggleSoftKeyboard(Context context, View view, boolean isShow) {
        InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        if (isShow) {
            view.requestFocus();
            imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
        } else {
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }


欢迎关注我的公众号,和我一起每天进步一点点!
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值