Fork me on GitHub

Android的EditText

EditText详解

默认文字

  • 布局中
    android:hint="默认显示的字符串"

  • 代码中

// 定义hint的值
SpannableString hintStr = new SpannableString(g""));
// 设置字体大小 true表示单位是SP
AbsoluteSizeSpan ass = new AbsoluteSizeSpan(14, true);
hintStr.setSpan(ass, 0, hintStr.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 et.setHint(new SpannedString(hintStr));
 et.setPadding(ScreenUtil.dp2px(this, 3), 0, 0, 0);

android:inputType=""

  • none 不弹出键盘
  • text 普通文本键盘
  • textEmailAddress 普通文本键盘,"@"
  • textUri 普通文本键盘,"/"
  • number 数字键盘
  • phone Phone-Style键盘
  • textCapSentences 正常的文本键盘但是每一句话第一个字母大写
  • textCapWords 正常文本键盘但是每一个单词的第一个字母大写
  • textAutoCorrect 自动提示拼写错误
  • textPassword 输入的文字都变成点点
  • textMultiLine 允许输入多行文本,可以换行

android:imeOptions=""

  • actionSearch 键盘出现搜索图标
  • actionNext 键盘出现Next图标
  • actionDone 键盘是完成图标
  • actionGo 键盘出现Go图标

自定义键盘出现文字

  • imeActionLabel 自定义键盘出现文字

自定义光标

  • 在资源文件中建立需要的Shape资源
  • 设置android:textCursorDrawable="@drawable/文件名"
  • cursorVisible="boolean" 设置光标是否可见

AutoCompleteTextView

android:completionThreshold="1"//默认是2,这就是为什么默认输入两个字符才能显示出提示信息的原因

限制键盘的输入类型和长度

1. 限制输入类型:
	代码中:et.setInputType(InputType.TYPE_TEXT_NUMBER);
	xml中:android:inputType="number"
2. 限制输入长度:
	代码中:et.setFilters(new InputFilter[]{new InputFilter.LengthFilter(10)});
	xml中:android:maxLength="10"
3. 限制输入固定的某些字符
	代码中:et.setKeyListener(DigitsKeyListener.getInstance(“123456xyz”);
	xml中:android:digits="@string/input_num_character"

代码中监听输入键盘按钮

editText.setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        boolean handled = false;
        if (actionId == EditorInfo.IME_ACTION_SEND) {
            sendMessage();
            handled = true;
        }
        return handled;
    }
});

代码中监听输入文本

editText. addTextChangedListener(new TextWatcher() {
    @Override
    public void afterTextChanged (Editable s){
    			//文本编辑结束之后
    }
    @Override
    public void beforeTextChanged (CharSequence s,int start, 
                int count,int after){
                //文本编辑之前
                }
                 @Override
    public void onTextChanged (CharSequence s, int start, 
                int before,int count){
                //文本编辑时
                }
});

明文和密文的处理

kotlin版
editText.apply {
        if (inputType == InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) {
            //文本内容为密文
            inputType = InputType.TYPE_TEXT_VARIATION_PASSWORD
            transformationMethod = PasswordTransformationMethod.getInstance()
            icon.setImageDrawable(ContextCompat.getDrawable(this@MainActivity, R.drawable.ic_eyes_closed))
            setSelection(text.length)
        } else {
            //文本内容为展示明文
            inputType = InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
            transformationMethod = HideReturnsTransformationMethod.getInstance()
            icon.setImageDrawable(ContextCompat.getDrawable(this@MainActivity, R.drawable.ic_eyes))
            setSelection(text.length)
       }
}

加粗斜体显示不全

StyleSpan style = new StyleSpan(Typeface.BOLD_ITALIC);
SpannableString string = new SpannableString(orderState+" ");
string.setSpan(style, 0, content.length(), SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(string);
posted @ 2021-06-15 14:01  KevinAt2022  阅读(199)  评论(0)    收藏  举报