一. 常用属性
hint、textColorHint、selectAllOnFocus="true"(获取焦点后全选输入款内容)、inputType(输入类型限制)、minLines/maxLines(最低/高的行数)、singleLine、textScaleX/textScaleY(字体左右/上下间距)
capitalize:英文字母大小写设置(默认为none; sentences -- 第一个字母大写; words - 单词字母大写,空格分开; characters -- 所有字母大写)
二. 光标相关方法
edittext.setSelection(int index); :设置光标的位置
edittext.setSelection(int start, int stop); :设置部分选中
edittext.setSelectAllFocus(true); :获取焦点时选中全部文本
edittext.setCursorVisible(false); :设置光标不可见
edittext.getSelectionStart()、edittext.getSelectionEnd(); :获得选中的文本位置
三. 带表情的EditText
可使用SpanableString或者Html来实现
SpannableString spanStr = new SpanableString("image");
Drawable drawable = getResources.getDrawable(R.drawable.icon);
drawable.setBounds(0, 0, drawable.getIntrunsicWidth(), drawable.getIntrinsicHeight());
ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);
spanStr.setSpan(span, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
int cursor = etittext.getSelectionStart();
edittext.getText().insert(cursor, spanStr);
四. 带删除按钮的EditText
public class EditTextWithDel extends EditText { private final static String TAG = "EditTextWithDel"; private Drawable imgInable; private Drawable imgAble; private Context mContext; public EditTextWithDel(Context context) { super(context); mContext = context; init(); } public EditTextWithDel(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; init(); } public EditTextWithDel(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mContext = context; init(); } private void init() { imgInable = mContext.getResources().getDrawable(R.drawable.delete_gray); addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { setDrawable(); } }); setDrawable(); } // 设置删除图片 private void setDrawable() { if (length() < 1) setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); else setCompoundDrawablesWithIntrinsicBounds(null, null, imgInable, null); } // 处理删除事件 @Override public boolean onTouchEvent(MotionEvent event) { if (imgInable != null && event.getAction() == MotionEvent.ACTION_UP) { int eventX = (int) event.getRawX(); int eventY = (int) event.getRawY(); Log.e(TAG, "eventX = " + eventX + "; eventY = " + eventY); Rect rect = new Rect(); getGlobalVisibleRect(rect); rect.left = rect.right - 100; if (rect.contains(eventX, eventY)) setText(""); } return super.onTouchEvent(event); } @Override protected void finalize() throws Throwable { super.finalize(); } }
五. EditText焦点和软键盘冲突解决
(1) 冲突原因:windowSoftInputMethod为Activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题
该属性可以控制 当有焦点产生时,软键盘是隐藏还是显示,以及是否减少活动主窗口大小以便腾出空间放软键盘。
(2) 解决方法:在AndroidManifest.xml里对应的Activity设置windowSoftInputMethod = "stateVisible" (软键盘通常可见)
然后在edittext.requestFocus()即可。