Android EditText(一)——EditText的基本使用

EditText的基本使用

  1. 设置默认输入法

    有时在弹出输入法时需要设定默认的输入状态,比如单词应用弹出输入法时,输入法最好是英文,而在字典中默认最好是中文输入法。Android并没有提供设置默认的输入状态的接口,但我们可以通过如下方法一样能够达到想要的效果:
    默认中文:


     //默认中文:
     mEditText.setInputType(EditorInfo.TYPE_CLASS_TEXT);
     //默认英文:     
     mEditText.setInputType(EditorInfo.TYPE_TEXT_VARIATION_URI);

2.打开和关闭输入法

手动控制输入法的开关状态也能提升用户体验,比如:

(1)有的搜索框会有一个清除按钮,点击清除按钮时就应该弹出输入法,因为用户清除搜索内容的目的多数时候是需要输入新的内容;

(2)执行搜索时应该隐藏输入法,因为显示输入法时会遮挡搜索结果,用户体验不太好;

(3)闹钟来时或者有其它window弹出时应该隐藏输入法,因为输入法也是window,如果不隐藏可能导致输入法遮挡住了其它window等用户体验不太友好的问题。

//打开输入法
    public void open(Context context,EditText editText){
        InputMethodManager inputMannager= (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
        inputMannager.showSoftInput(editText,0);
    }


    //关闭输入法
    public void close(Context context,EditText editText){
        InputMethodManager inputMannager= (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
        inputMannager.hideSoftInputFromWindow(editText.getWindowToken(),0);
    }

3.监听EditText的输入状态

(1) 类似新浪微博,在输入内容时会提示还可以输入多少字;

(2)有的搜索引擎,输入内容时实时显示搜索结果;

(3)有的输入框有输入长度限制,输入内容超过长度限制时弹出提示信息。

上面这些都可以通过监听EditText的输入状态来实现,具体实现方式如下:

mEditText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                /*
                 * S 是文本框的文本未添加输入法选择的文字时的字符队列,
                     如:  文本框一开始文本 "你好我我是工程师"
                 * start: 是总文本 去除 你选择替换文本字数 剩下的字数
                 *        如 我长按文本选择“工程师” ,再输入文本将“工程师”替换掉 start=8-3=5
                 * count:你选择替换文本的字数 即“工程师” count=3
                 * after:输入法你一次拼写输入的字数,
                 *        如 我输入“男生” 选择 after=2
                 */
                Log.d(TAG, "beforeTextChanged: " + s + "," + start + "," + count + "," + after);


            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                /*
                 * S 是文本框的文本添加输入法选择的文字后的字符队列,
                     如:  文本框输入“男生”替换“工程师”文本 "你好我我是男生"
                 * start: 是总文本 去除 你选择替换文本字数 剩下的字数
                 *        如 我长按文本选择“工程师” ,再输入文本将“工程师”替换掉 start=8-3=5
                 * before:你选择替换文本的字数 即“工程师” count=3
                 * count:输入法你一次拼写输入的字数,
                 *        如 我输入“男生” 选择 after=2
                 */


                Log.d(TAG, "onTextChanged: 监听EditText输入内容的变化,在这里可以监听输入内容的长度。");
                Log.d(TAG, "onTextChanged: " + s + "," + start + "," + before + "," + count);
            }

            @Override
            public void afterTextChanged(Editable s) {
                Log.d(TAG, "afterTextChanged: 这里可以实现所输即所得," +
                        "用户输入的同时可以立即在这里根据输入内容执行操作,显示搜索结果!");
                Log.d(TAG, "afterTextChanged: " + s);
                //在这里我们设置输入的不是a就不在编辑框里显示
                for (int i = 0; i < s.length(); i++) {
                    if (s.charAt(i) != 'a') {
                        s.delete(i, i+1);
                    }
                }
            }
        });

    }

这里写图片描述


4.监听输入法中的回车按钮

比如搜狗输入法的右下角有一个回车按钮,我们希望用户点击它时也执行确认功能,
可以通过监听EditText的按键点击事件来实现:

mEditText.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {

                if(keyCode==KeyEvent.KEYCODE_ENTER && event.getAction()==KeyEvent.ACTION_UP){
                    Log.d(TAG, "onKey: 手指弹起时执行确认功能");
                    Log.d(TAG, "v"+v+"keyCode"+keyCode+"event"+event);
                    return true;
                }

                return false;
            }
        });

5.改变输入法中回车按钮的显示内容
如果回车按钮是执行搜索功能,则回车按钮上显示”搜索”,如果是执行发送功能,则显示”发送”,如果是下一步,则显示”下一步”。

实现这个功能需要调用EditText的setImeOptions方法:

    /**

    *

    * IME_ACTION_SEARCH 搜索

    * IME_ACTION_SEND 发送

    * IME_ACTION_NEXT 下一步

    * IME_ACTION_DONE 完成

    */

    mInputEditTxt.setImeOptions(EditorInfo.IME_ACTION_SEARCH);

这里写图片描述


6.游标的处理
(1)改变游标的位置


        //有时候我们在项目会有这样的需求:
        // 进入页面的时候默认给予了文字不需要用户重复输入,
        // 只需要在后面补充即可,比如输入网址的时候
        mEditText.setText("http://");
        mEditText.setSelection(mEditText.getText().length());


(2)设置游标图标


//设置图片
android:textCursorDrawable="@mipmap/ic_launcher"
//设置样式
 android:textCursorDrawable="@drawable/ed_bg"

//ed_bg
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
      <solid android:color="#FF0000"/>
      <size android:width="10dp" android:height="40dp"/>
      <gradient android:angle="90"  android:startColor="#ffff00" 
      android:endColor="#ff7700"/>
      <corners android:radius="3dp" />


</shape>

这里写图片描述


这里写图片描述


7.屏蔽EditText的复制、粘贴功能
在低版本的Android SDK中,如果对EditText的输入长度有限制时,长按EditText并将选中的内容拖动到EditText输入框中,如果这时候的长度超过了EditText的输入长度限制,程序会直接崩溃掉,在高版本的Android SDK中这个问题已经改了,如果出现上面的情况会直接清空输入框中的内容,为了避免这种讨厌的问题,我们可以屏蔽EditText的复制和粘贴功能,只需要屏蔽EditText的长按响应即可:


    /**

         * 屏蔽复制、粘贴功能

         * 

         * */

        mInputEditTxt.setCustomSelectionActionModeCallback(new ActionMode.Callback() {

            public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {

                return false;

            }



            public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {

                return false;

            }



            public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {

                return false;

            }



            @Override

            public void onDestroyActionMode(ActionMode mode) {



            }

        });



        mInputEditTxt.setLongClickable(false);


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值