Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

一行代码实现Android软键盘和EditText各种交互

License

Notifications You must be signed in to change notification settings

devChengs/SoftKeyboardUtil

Repository files navigation

通过一行代码实现软键盘与EditText的交互.

介绍 : 有一个很常见的需求,就是页面中软键盘打开时,希望能点击屏幕其他的任何位置,就能把软键盘给隐藏掉.

比如登录, 注册之类的常见页面.

在实际开发中,很多大佬通过其他控件的点击事件,在onclick方法中调用软键盘的隐藏方法.

在页面复杂的时候,要实现的onclick方法会很多,甚至还会有逻辑处理冲突的情况.这样做就显得非常不友好.


方式一 继承方式

原理 : 怎样封装成一行代码实现,就是重写Activity的dispatchTouchEvent(MotionEvent ev)方法,全局监听触摸事件, 当点击的页面时,发现如果焦点在EditView上,就把软键盘隐藏,否则就不做处理.

使用: 只要对应的页面 重写下面一个方法,改变return的返回值即可

 @Override
 public int[] hideSoftByEditViewIds() {
 return 传入页面EditText的id[]
 }

如果要对某些控件进行过滤 ,可以重写

 @Override
 public View[] filterViewByIds() {
 return 传入要过滤的View[]
 }

方式二 proxy链式调用(由jiiiiiin提供)

 try {
 mActivityKeyBoardProxy = ActivityKeyBoardProxyBuild.getInstance()
 .withActivity(this)
 .withHideSoftByEditViewIds(new int[]{R.id.et_phone, R.id.et_check_code, R.id.et_city_code})
 .withFilterViewByIds(new View[]{mBtnCode})
 .withOnHideInputForceListener(new ActivityKeyBoardProxy.OnHideInputForceListener() {
 @Override
 public void onHideInputForce(MotionEvent motionEvent) {
 Log.d(TAG, "隐藏了系统键盘");
 }
 })
 .build();
 } catch (Exception e) {
 e.printStackTrace();
 Log.e(TAG, e.getMessage());
 }

修复bug: 修复连续点击EditText,软键盘会先关闭在打开的问题


效果 :

图片


由于半年多没写Android,很多代码陌生了,欢迎各位大佬提pull request

喜欢的朋友记得点个Star 具体详情请看主页 博客地址

About

一行代码实现Android软键盘和EditText各种交互

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%

AltStyle によって変換されたページ (->オリジナル) /