本篇文章将介绍Android中EditText的常用技能。

1.解决初次进入界面就弹出软件盘的问题:

首先产生该原因的根本原因是该EditText默认的获取了焦点了。

法1(不推荐): 

强制不让其弹出软件盘

 Mainfest.xml 设置属性 

        

Activity中onCreate()设置

    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //Android避免进入页面EditText自动弹出软键盘        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);    }

该方法解决了不弹出软键盘,但是EditText 仍然获取了焦点了,效果是未弹出软键盘但光标仍然在闪

法2(推荐):

转移焦点,利用clearFocus()方法变相让其失去焦点,需要注意的是应当尽可能的转移到其父组件上

xml中,设置父组件可以获得焦点

                                

在activity中:

清除该EditText的焦点即可。

    @Override    protected void onResume() {        super.onResume();        mEtContent.clearFocus();    }

该方法效果完美,而且易于实现。但是需要注意的是clearfocus之后就失去焦点了,也就不会响应点击事件,这个还是得权衡的

另外 view.requestFocus()是用户获取焦点的。mEditText.setCursorVisible(false)即设置光标不可见

当设置clearfocus()时,去点击编辑框,打印日志

        /*做一下测试*/        mEtContent.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View view, MotionEvent motionEvent) {                switch (motionEvent.getAction()){                    case MotionEvent.ACTION_DOWN:                        Log.e("键盘", "ACTION_DOWN" );                        break;                    case MotionEvent.ACTION_MOVE:                        Log.e("键盘", "ACTION_MOVE" );                        break;                    case MotionEvent.ACTION_UP:                        Log.e("键盘", "ACTION_UP" );                        break;                }                return false;            }        });        mEtContent.setOnClickListener(view -> {            Log.e("键盘", "OnClickListener" );        });

clearFocus()点击事件Log结果:

requestFocus()点击事件Log结果

比较发现:无焦点不响应点击事件

2. 解决在弹出软件盘时立即退出该界面会出现界面错位的问题

我们可能会遇到当弹出软键盘时,用户突然点击了标题栏的返回按钮,这时候假若是退出到Fragment直接finish掉会出布局错落的问题。这时候需要先关闭再退出,而这时候的问题是可能是同步的,问题依旧还是会有,这时可以加个肉眼看不到的延迟。

            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);            // 隐藏软键盘            imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);            // 延迟个0.1秒是因为 可能推出太快导致软键盘刚刚被回收,前面的界面出现断层            try {                Thread.sleep(50);            } catch (InterruptedException e) {                e.printStackTrace();            }            finish();

嗯,很粗暴,但很管用啊。这里软键盘我直接关闭了也不太好,最好是可以判断下,但是貌似也没有特别好的api一定可以判断是弹出或者隐藏的,有时间做这个操作,直接关了岂不是更好呢。

3. 点击空白实现软键盘的隐藏

 public static void hideKeyboard(MotionEvent event, View view,                                    Activity activity) {        try {            if (view != null && view instanceof EditText) {                int[] location = { 0, 0 };                view.getLocationInWindow(location);                int left = location[0], top = location[1], right = left                        + view.getWidth(), bootom = top + view.getHeight();                // 判断焦点位置坐标是否在空间内,如果位置在控件外,则隐藏键盘                if (event.getRawX() < left || event.getRawX() > right                        || event.getY() < top || event.getRawY() > bootom) {                    // 隐藏键盘                    IBinder token = view.getWindowToken();                    InputMethodManager inputMethodManager = (InputMethodManager) activity                            .getSystemService(Context.INPUT_METHOD_SERVICE);                    inputMethodManager.hideSoftInputFromWindow(token,                            InputMethodManager.HIDE_NOT_ALWAYS);                }            }        } catch (Exception e) {            e.printStackTrace();        }    }
    @Override    public boolean dispatchTouchEvent(MotionEvent ev) {        switch (ev.getAction()){            case MotionEvent.ACTION_DOWN:                View view = getCurrentFocus();                UIUtils.hideKeyboard(ev,view,SessionActivity.this);                break;        }        return super.dispatchTouchEvent(ev);    }

 

更多相关文章

  1. android点击空白处或者其他控件的时候隐藏软键盘
  2. 【Android(安卓)界面效果25】android中include标签的使用
  3. Android(安卓)初级面试者拾遗(前台界面篇)之 View 和 ViewGroup
  4. Android(安卓)基础:SharePreferences知识总结和在“登录”界面的
  5. Android应用程序四个构建模块
  6. Android写一个简单的欢迎界面
  7. Android(安卓)Studio和eclipse之间的不同
  8. Windows环境中集成Android4.x和Exclipse开发环境
  9. 【Android实战决】Android沉浸式状态栏实现(下)

随机推荐

  1. 图片拖动功能实现
  2. 那些年收藏的技术文章(二)-云笔记篇
  3. Android之简易音乐播发器
  4. android的系统属性设置和应用
  5. Android版本更新提示框
  6. 升级Android Studio 3.2.1后 遇到问题
  7. 通过Android上的意图启动Google地图路线
  8. Android Build系统常见变量说明
  9. Android 小球碰撞检测技术
  10. android 原生应用的调用