整理:控件EditText

TextView控件 - CSDN博客 https://blog.csdn.net/An_nAl/article/details/78094430

当手机屏幕旋转后,Android系统自动会保存文本输入框中的文字、光标位置等等信息。

修改回车键的文字为“搜索”

xml中设置下列两个属性后,回车键的文字则显示为“搜索”二字:

android:singleLine="true"
android:imeOptions="actionSearch"

文字改为“转到”android:imeOptions="actionGo"
捕获回车键

activity中设置捕获操作事件:
(1)方法一:

editText.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) {
                    //你想在回车后操作的事件。。。
                    return true;
                }
                return false;
            }
        });       

(2)方法二:

 editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if (actionId == EditorInfo.IME_ACTION_SEARCH) {
                    //你想在回车后操作的事件。。。
                }
                return false;
            }
        });

监听文字内容变化

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

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void afterTextChanged(Editable s) {
                if (StringUtil.isEmpty(s.toString())) {

                } else {

                }
            }
        });

给EditText添加样式

drawable新建样式xml给EditText设置background就行啦
详情请参见Button简介 - CSDN博客 https://blog.csdn.net/An_nAl/article/details/80251116

控制行数

借鉴与:android:ellipsize的使用 - 孤鹤+ - 博客园 https://www.cnblogs.com/chiao/archive/2011/08/20/2147250.html
EidtText和textview中内容过长的话自动换行,使用android:ellipsize与android:singleine可以解决,使只有一行。
在xml中:

android:singleline = "true"
android:ellipsize = "end"    省略号在结尾
android:ellipsize = "start"   省略号在开头
android:ellipsize = "middle"     省略号在中间
android:ellipsize = "marquee"  跑马灯

在代码中:

tv.setEllipsize(TextUtils.TruncateAt.valueOf("END"));
tv.setEllipsize(TextUtils.TruncateAt.valueOf("START"));
tv.setEllipsize(TextUtils.TruncateAt.valueOf("MIDDLE"));
tv.setEllipsize(TextUtils.TruncateAt.valueOf("MARQUEE"));
tv.setSingleLine(true);

控制小数点前后的位数

public class MyWatcher implements TextWatcher {
        private int beforeDot;
        private int afterDot;

        /**
         * 构造器
         *
         * @param beforeDot 小数点前位数   不限制输入-1
         * @param afterDot  小数点后位数   不限制输入-1
         */
        public MyWatcher(int beforeDot, int afterDot) {
            this.beforeDot = beforeDot;
            this.afterDot = afterDot;
        }


        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            judge(s);
        }

        private void judge(Editable editable) {
            String temp = editable.toString();
            int posDot = temp.indexOf(".");
            //直接输入小数点的情况
            if (posDot == 0) {
                editable.insert(0, "0");
                return;
            }
            //连续输入0
            if (temp.equals("00")) {
                editable.delete(1, 2);
                return;
            }
            //输入"08" 等类似情况
            if (temp.startsWith("0") && temp.length() > 1 && (posDot == -1 || posDot > 1)) {
                editable.delete(0, 1);
                return;
            }

            //不包含小数点 不限制小数点前位数
            if (posDot < 0 && beforeDot == -1) {
                //do nothing 仅仅为了理解逻辑而已
                return;
            } else if (posDot < 0 && beforeDot != -1) {
                //不包含小数点 限制小数点前位数
                if (temp.length() <= beforeDot) {
                    //do nothing 仅仅为了理解逻辑而已
                } else {
                    editable.delete(beforeDot, beforeDot + 1);
                }
                return;
            }

            //如果包含小数点 限制小数点后位数
            if (temp.length() - posDot - 1 > afterDot && afterDot != -1) {
                editable.delete(posDot + afterDot + 1, posDot + afterDot + 2);//删除小数点后多余位数
            }
        }
    }

使用

ed.addTextChangedListener(new MyWatcher(-1, 1));//小数点前位数不限制,小数点后位数设置为1

控制输入的文本类型

比如:设置输入的内容必须为数字

1、代码设置::

editText.setInputType(InputType.TYPE_CLASS_NUMBER);

2、xml设置:

 android:inputType="number"

控制输入的文本长度

比如:设置输入的内容长度最多为11。

1、代码设置::

editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(11)});

2、xml设置:

 android:maxLength="11"

文本输入框是否获取焦点

mEdSearch为EditText控件

 /**
     * 文本输入框是否获取焦点
     *
     * @param isGet 获取到焦点:显示输入变盘、显示历史浏览列表、隐藏法规分组列表
     */
    private void setEdSearchGetFocus(boolean isGet) {
        if (isGet) {
            mEdSearch.setFocusable(true);//设置输入框可聚集
            mEdSearch.setFocusableInTouchMode(true);//设置触摸聚焦
            mEdSearch.requestFocus();//请求焦点
            mEdSearch.findFocus();//获取焦点          
        } else {
            mEdSearch.setFocusable(false);//设置输入框不可聚焦,即失去焦点和光标          
        }     
    }

控制只能输入数字字母和汉字

正则表达式:

/**
     * 控制只能输入数字字母和汉字
     */
    private String stringFilter(String str) throws PatternSyntaxException {
        //数字字母和汉字
        String regEx = "[^a-zA-Z0-9\\u4E00-\\u9FA5]";
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(str);
        return m.replaceAll("").trim();
    }

给EditText控件添加文字改变监听addTextChangedListener

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

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                try {
                    String text = mEdSearch.getText().toString();
                    String str = stringFilter(text.toString());
                    if (!text.equals(str)) {
                        mEdSearch.setText(str);
                        mEdSearch.setSelection(str.length());
                    }
                }catch (Exception e){

                }
            }

            @Override
            public void afterTextChanged(Editable s) {
                String searchContent = s.toString(); //文本输入框中的全部文字            
            }
        });      

是否显示键盘

  /**
     * 是否显示键盘
     */
    private void showSoftInput(boolean isShow){
        InputMethodManager mInputMethodManager = (InputMethodManager) mActivity.getSystemService(Context.INPUT_METHOD_SERVICE);//输入法管理器
        if (isShow) {
            if (mInputMethodManager != null) {
                mInputMethodManager.showSoftInput(mEdSearch, InputMethodManager.SHOW_FORCED);// 显示输入法
            }
        } else {
            if (mInputMethodManager != null && mInputMethodManager.isActive()) {
                mInputMethodManager.hideSoftInputFromWindow(mEdSearch.getWindowToken(), 0);// 隐藏输入法
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值