详解EditText输入框
1.设置默认提示文本
默认提示文本的两个属性如下:
android:hint="默认提示文本"
android:textColorHint="#95A1AA"
前者设置提示的文本内容,后者设置提示文本的颜色
2.获得焦点后全选组件内所有文本内容
当我们想在点击输入框获得焦点后,不是将光标移动到文本的开始或者结尾;而是获取到输入框中所有的文本内容的话!这个时候我们可以使用selectAllOnFocus属性
android:selectAllOnFocus="true"
设置为true的EditText获得焦点后 选中的是所有文本!
3.限制EditText输入类型
有时我们可能需要对输入的数据进行限制,比如输入电话号码的时候,你输入了一串字母,这 显然是不符合我们预期的,而限制输入类型可以通过inputType属性来实现!
比如限制只能为电话号码:
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="phone" />
该属性下可选择的参数有
none//输入普通字符
text//输入普通字符
textCapCharacters//输入普通字符
textCapWords//单词首字母大小
textCapSentences//仅第一个字母大小
textAutoCorrect//前两个自动完成
textAutoComplete//前两个自动完成
textMultiLine//多行输入
textImeMultiLine//输入法多行(不一定支持)
textNoSuggestions//不提示
textUri//URI格式
textEmailAddress//电子邮件地址格式
textEmailSubject//邮件主题格式
textShortMessage//短消息格式
textLongMessage//长消息格式
textPersonName//人名格式
textPostalAddress//邮政格式
textPassword//密码格式
textVisiblePassword//密码可见格式
textWebEditText//作为网页表单的文本格式
textFilter//文本筛选格式
textPhonetic//拼音输入格式
number//数字格式
numberSigned//有符号数字格式
numberDecimal//可以带小数点的浮点格式
phone//拨号键盘
datetime//日期+时间格
date//日期键盘
time//时间键盘
4.设置最小行,最多行,单行,多行,自动换行
EditText默认是多行显示的,并且能够自动换行,即当一行显示不完的时候,他会自动换到第二行。
我们也可以对其进行限制,比如
设置最小行的行数:android:minLines=“3”
或者设置EditText最大的行数:android:maxLines=“3”
另外很多时候我们可能要限制EditText只允许单行输入,而且不会滚动,我们只需要设置
android:singleLine="true"
即可实现单行输入不换行
5.设置文字间隔,设置英文字母大写类型
我们可以通过下述两个属性来设置字的间距:
android:textScaleX="3" //设置字与字的水平间隔
android:textScaleY="4" //设置字与字的垂直间隔
另外EditText还为我们提供了设置英文字母大写类型的属性:
android:capitalize 默认none
三个可选值
sentences:仅第一个字母大写
words:每一个单词首字母大小,用空格区分单词
characters:每一个英文字母都大写
6.控制EditText四周的间隔距离与内部文字与边框间的距离
使用margin相关属性增加组件相对其他控件的距离
android:marginTop = "10dp"
使用padding增加组件内文字和组件边框的距离,
android:paddingTop = "10dp"
7.EditText光标位置的控制
有时可能需要我们控制EditText中的光标移动到指定位置或者选中某些文本!
EditText为我们提供了setSelection()的方法,方法有两种形式:
一个参数的是设置光标位置的,两个参数的是设置起始位置与结束位置的中间括的部分,即部分选中!
当然我们也可以调用
setSelectAllOnFocus(true);
让EditText获得焦点时选中全部文本!
另外我们还可以调用
setCursorVisible(false);设置光标不显示
还可以调用
getSelectionStart()和getSelectionEnd获得当前光标的前后位置
8.带删除按钮的EditText
我们常常在App的输入界面上看到:
当我们输入内容后,右面会出现这样一个小叉叉的图标,我们点击后会清空输入框中的内容!
实现起来其实也很简单:
1.为EditText设置addTextChangedListener,
2.然后重写TextWatcher()里的抽象方法,这个用于监听输入框变化的;
3.然后setCompoundDrawablesWithIntrinsicBounds设置小叉叉的图片;
4.最后,重写onTouchEvent方法,如果点击区域是小叉叉图片的位置,清空文本!
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();
}
}