文档章节

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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

jetbrains系产品IDEA:mac上面提示快捷键设置

原因 由于Mac上面的Ctrl+空格变成输入法切换的快捷键,在使用IDEA的过程中,代码提示很不方便,需要使用option+/这种传统eclipse上面的代码提示快捷键作为主要快捷键。 怎么修改? 移除【opt...

亚林瓜子
32分钟前
0
0
Exclipse 输出结果时换行

System.out.println(f1 + "\n" + d1 + "\n" + d2);

笑丶笑
32分钟前
1
0
怎样治疗标签不能触发onblur事件

I realize this was over a year ago, but it showed up for me in Google while trying to solve this same issue. It seems Chrome does not consider some elements, like body and ancho......

Weijuer
35分钟前
0
0
vue常见库安装

移动设备上的浏览器默认会在用户点击屏幕大约延迟300毫秒后才会触发点击事件,这是为了检查用户是否在做双击。为了能够立即响应用户的点击事件,才有了FastClick。 安装fastclick npm insta...

林夏夕
37分钟前
0
0
kafka 教程(三) kafka Java API 编程

下午写

MrPei
38分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部