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();
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值