EditText的一些注意事项

1、一般来说,EditText是不会顶格或者置顶输入的,文字与EditText的边框有一小段距离,可用padding实现:

android:paddingLeft="10dp"
android:paddingTop="10dp"

2、如果你的EditText的背景是黑色或者其他颜色的话,有可能会看不到光标,可用下面代码实现光标颜色与字体颜色一致:

android:textCursorDrawable="@null"

3、当你的EditText的高度较高的时候,比如说200dp,你会发现,你输入的文字在EditText的中间而不是顶部,设置gravity可达到输入文字位置的控制:

android:gravity="left|top"

4、EditText内部输入时隐藏的文字可用hint设置,如果不是纯文字,而是文字与图片结合成的hint,有一种比较简单的方法,就是用相对布局包裹EditText,然后在EditText上下一个布局,就是你需要的hint的布局,在Activity中,设置EditText得到焦点的时候,hint布局隐藏,失去焦点的时候,如果EditText里面没有文本,则显示该布局,如果已经有文本了,则隐藏改布局:

private void et_hint() {
    main_report_et_notes.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            // hasFocus 为true时表示editText控件得到焦点
            if (hasFocus) {
                main_report_tv_ivandtv.setVisibility(View.GONE);
            }
        }
    });
}

EditText失去焦点的事件,可以设置为点击Activity的父布局的时候,EditText就失去焦点,需要注意的是,如果你的父布局只有一页,那你则可以直接设置父布局的点击事件即可,如果父布局里面嵌套有ScrollView,则设置父布局的点击事件,是没效果的,要设置ScrollView的点击事件才可以,然后,失去焦点之后的操作都可以在点击事件里面完成,比如说显示hint之类的,还有,就是默认的EditText点击EditText之外的地方,输入法是不会消失的,这时候就有一种做法,就是让EditText失去焦点的时候,隐藏系统的输入法,具体操作如下:

main_report_rl_memo_father.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {

        //relativeLayout获取焦点
        main_report_rl_memo_father.setFocusable(true);
        main_report_rl_memo_father.setFocusableInTouchMode(true);
        main_report_rl_memo_father.requestFocus();

        //隐藏输入法
        InputMethodManager imm = (InputMethodManager)
                Report.this.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(main_report_rl_memo_father.getWindowToken(), 0);
        //失去焦点的时候,如果EditText为空,则让为hint的布局显示
        if ("".equals(main_report_et_notes.getText().toString())) {
            main_report_tv_ivandtv.setVisibility(View.VISIBLE);
        }
        return false;
    }
});

注:如果对EditText失去焦点之后没什么实例化的操作,可以将几大布局封装为一个类,然后在需要的EditText上直接调用类。
5、点击EditText输入的时候,EditText在输入法上方的实现方法,就是在Manifest上,在对应的Activity中添加这么一句话:

android:windowSoftInputMode="stateVisible|adjustResize"

6、当你的EditText有一定高度,输入文本较多的时候,如果用户想看到一开始输入的文字,则需要EditText内部可滚动,在xml中加入下面代码即可实现:

android:scrollbars="vertical"

如果EditText中嵌套了ScrollView,则需要重写一个,解决滑动冲突事件,重写ScrollView,并在xml引用重写的ScrollView即可,重写代码如下:

public class VerticalScrollview extends ScrollView {
    public VerticalScrollview(Context context) {
        super(context);
    }

    public VerticalScrollview(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public VerticalScrollview(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        final int action = ev.getAction();
        switch (action)
        {
            case MotionEvent.ACTION_DOWN:
                super.onTouchEvent(ev);
                break;

            case MotionEvent.ACTION_MOVE:
                return false;

            case MotionEvent.ACTION_CANCEL:             
                super.onTouchEvent(ev);
                break;

            case MotionEvent.ACTION_UP:
                return false;

            default:
            break;
        }

        return false;
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        super.onTouchEvent(ev);    
        return true;
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值