文档章节

Android 点击Editext范围以外的区域软键盘自动隐藏

LppLbb
 LppLbb
发布于 2017/07/10 16:05
字数 526
阅读 6
收藏 0

        每次隐藏软键盘要点击返回键或者软键盘上的隐藏键实在太麻烦,点击输入框以外的区域自动隐藏才符合使用习惯嘛。找了两个真实有用的方法。

实现方法一:

        给当前界面布局父layout设置点击事件(相当于给整个Activity设置点击事件),在事件里实现键盘隐藏的方法:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"

    android:id="@+id/rootview"  
    android:clickable="true">  
  
</RelativeLayout>  

         在布局中为根布局加上id和clickable=true。

         然后再在代码中为rootview添加点击事件的监听:

findViewById(R.id.rootview).setOnClickListener(this);  

@Override  
public void onClick(View v) {  
    switch (v.getId()) {  
    case R.id.rootview:  
         InputMethodManager imm = (InputMethodManager)  
         getSystemService(Context.INPUT_METHOD_SERVICE);  
         imm.hideSoftInputFromWindow(v.getWindowToken(), 0);  
        break;  
    }  
}  

        这样就解决了点击输入框外区域软键盘的隐藏效果,对于布局不是特别复杂或是其它触摸事件少的情况下可以使用。

实现思路二:

        通过dispatchTouchEvent每次ACTION_DOWN事件中动态判断非EditText本身区域的点击事件,然后在事件中进行屏蔽。

@Override  
public boolean dispatchTouchEvent(MotionEvent ev) {  
    if (ev.getAction() == MotionEvent.ACTION_DOWN) {  
        View v = getCurrentFocus();  
        if (isShouldHideInput(v, ev)) {  
  
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
            if (imm != null) {  
                imm.hideSoftInputFromWindow(v.getWindowToken(), 0);  
            }  
        }  
        return super.dispatchTouchEvent(ev);  
    }  
    // 必不可少,否则所有的组件都不会有TouchEvent了  
    if (getWindow().superDispatchTouchEvent(ev)) {  
        return true;  
    }  
    return onTouchEvent(ev);  
}  

       

        isShoudHideInput(View v,MotionEvent e)方法:

public  boolean isShouldHideInput(View v, MotionEvent event) {  
    if (v != null && (v instanceof EditText)) {  
        int[] leftTop = { 0, 0 };  
        //获取输入框当前的location位置  
        v.getLocationInWindow(leftTop);  
        int left = leftTop[0];  
        int top = leftTop[1];  
        int bottom = top + v.getHeight();  
        int right = left + v.getWidth();  
        if (event.getX() > left && event.getX() < right  
                && event.getY() > top && event.getY() < bottom) {  
            // 点击的是输入框区域,保留点击EditText的事件  
            return false;  
        } else {  
            return true;  
        }  
    }  
    return false;  
}  

 

        这个贴子是转的,但网上一搜一大片都写着原创,转帖要附链接我都不知道该附哪一个,那么干脆╮(╯_╰)╭。。

        以上两种方法都试过了,亲测有效,其实第一种就是不测也知道有效,主要是第二种,其实还是这种方便一些,在BaseActivity里设置一次就OK了。

© 著作权归作者所有

共有 人打赏支持
LppLbb
粉丝 0
博文 8
码字总数 1445
作品 0
潍坊
程序员
Android软键盘遮挡的四种解决方案

一问题: 在编辑框输入内容时会弹出软键盘,而手机屏幕区域有限往往会遮住输入界面 二解决方案: 方法一: 在你的activity中的oncreate中setContentView之前写上这个代码 getWindow().setSof...

少年追梦
2015/07/14
0
0
android 键盘状态,获取键盘显示和隐藏

要设置弹出键盘是否覆盖Activity的view,或者软键盘的显示隐藏状态,需要用到Activity的一个属性: android:windowSoftInputMode 该属性在AndroidManifest.xml中设置,如下: <activity andr...

Remix_jx
2015/01/18
0
0
android软键盘弹出引起的各种不适终极解决方案

很多写登录界面的开发者都会遇到一个问题:那就是在登录界面时,当你点击输入框时,下边的按钮有时会被输入框挡住,这个不利于用户的体验,所以很多人希望软键盘弹出时,也能把按钮挤上去。很...

simpower
2014/09/21
0
2
android开发键盘把导航顶上去了解决办法

解决办法,在mainfest.xml中,在和导航条相关的Activity中加: <activity android:name=".filing.AddFilingActivity" android:windowSoftInputMode="adjustResize|stateHidden" /> android:w......

EDIAGD
2014/05/19
0
0
android笔记----软键盘弹出后屏幕适配

清单文件中对需要适配的Activity设置属性:windowSoftInputMode 属性对应值的含义: 值 描述 "stateUnspecified" 软键盘的状态(是否它是隐藏或可见)没有被指定。系统将选择一个合适的状态或依...

kymjs张涛
2014/04/17
0
1

没有更多内容

加载失败,请刷新页面

加载更多

《Netkiller Java 手札》· 二进制文件操作大全

本文节选自《Netkiller Java 手札》 Netkiller Java 手札 Mr. Neo Chan, 陈景峯(BG7NYT) 中国广东省深圳市望海路半岛城邦三期 518067 +86 13113668890 <netkiller@msn.com> $Id: book.xml 6......

netkiller-
17分钟前
0
0
Fiddler Debugger post请求

常用的两种: 第一种默认的 对应URL为www 的要用请求头为:Content-Type: application/x-www-form-urlencoded 请求参数为 :param1=1234¶m2=12345 注:有些接口是指定用这种的第二方式并不...

轻量级赤影
24分钟前
1
0
如何搭建母婴亲子类知识社区

近期社交领域融资动作频繁,海尔高管、海尔医疗有限公司总裁管礼庆创办的母婴知识分享社区平台Alwayslove于上月获得700万天使轮融资。 Alwayslove是一个母婴知识分享社区平台,采用UGC模式,...

ThinkSNS账号
26分钟前
0
0
Android 自定义构建类型 BuildType

最近接触到自定义构建类型 BuildType,发现这一块有些地方稍不注意的话会被绕进去浪费点时间,既然我这边已经花费时间了,如果正好你也需要接触到 BuildType,也许接下来分享的 tips 可能会帮...

猴亮屏
27分钟前
1
0
美团点评基于 Flink 的实时数仓建设实践

引言 近些年,企业对数据服务实时化服务的需求日益增多。本文整理了常见实时数据组件的性能特点和适用场景,介绍了美团如何通过 Flink 引擎构建实时数据仓库,从而提供高效、稳健的实时数据服...

美团技术团队
31分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部