整理:控件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);// 隱藏輸入法
            }
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章