ScrollView里面的EditText的点击空白处键盘消失的问题

原创 2016年02月01日 15:17:03

关于EditText的点击空白处键盘消失的问题,我相信大家都知道怎么做。那将EditText嵌套在ScrollView里面,点击空白处键盘消失就会出现一些问题。只有你点击在ScrollView以外的地方才会实现效果,点击在ScrollView里面的地方则不会实现。原因很简单,实现屏幕点击事件的是onTouchEvent事件,而ScrollView本身就有onTouchEvent方法,所以被自身拦截了,所以我们必须重写ScrollView里面的方法。很多人说重写ScrollView里面的onTouchEvent方法,不让他拦截,我也尝试了一下,效果总是不理想,所以我在这里不是让他拦截,而是让他实现键盘消失的方法,一样可以达到想要的效果。

自定义一个ScrollView控件,代码如下:

package com.cssiot.reminders.widget;

import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.inputmethod.InputMethodManager;
import android.widget.ScrollView;


/**
 * 自定义的ScrollView,解决了onTouchEvent冲突的问题
 * <p/>
 * Created by star on 2016/1/6.
 */
public class OnTouchScrollView extends ScrollView {
    private float downY = 0;
    private float upY = 0;
    private Boolean flag = false;

    public OnTouchScrollView(Context context) {
        super(context);
    }

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

    public OnTouchScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {//这个方法如果 true 则整个Activity 的 onTouchEvent() 不会被系统回调
        int action = event.getAction();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                downY = event.getY();
                return true;
            case MotionEvent.ACTION_UP:
                upY = event.getY();
                //相等为false
                flag = compareFloat();
                if (!flag) {
                    Activity activity = (Activity) getContext();
                    //收键盘
                    InputMethodManager manager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); //初始化InputMethodManager类
                    if (activity.getCurrentFocus() != null
                            && activity.getCurrentFocus().getWindowToken() != null) {
                        manager.hideSoftInputFromWindow(activity.getCurrentFocus()
                                .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
                    }
                }
        }
        return super.onTouchEvent(event);
    }

    /**
     * 比较y轴的起始点和终点的差距,判断是否是在同一个点上,允许200的误差
     * @return
     */
    private Boolean compareFloat() {
        //不相等
        if (Math.abs(upY - downY) > 200) {
            return true;
        } else {//相等  拦截设置false
            return false;
        }
    }
}
在布局文件里引用这个控件即可,代码如下:

<com.cssiot.reminders.widget.OnTouchScrollView
        android:id="@+id/scroll"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical"
        android:layout_below="@+id/title_layout"
        android:layout_above="@+id/commit_btn">
</com.cssiot.reminders.widget.OnTouchScrollView>



版权声明:本文为博主原创文章,未经博主允许不得转载。

Unity中使用UGUI与ScrollView的练习

一、相关组件 ScrollRect Mask Grid Layout Group Scrollbar 二、步骤 1、创建一个Panel,命名为ScrollRect,添加 ScrollRect组件 ...
  • a6627651
  • a6627651
  • 2015年05月06日 20:39
  • 49714

Android点击EditText文本框之外任何地方隐藏键盘的解决办法

的的 的
  • mad1989
  • mad1989
  • 2014年05月05日 18:12
  • 63205

iOS 点击空白处收回键盘的方法

在iOS的开发中经常会用到输入框,当你点击输入框是键盘会自动弹出,十分方便。但要收回键盘确十分麻烦,需要实现输入框中return的代理方式,当点击return键是键盘才会回收,这种用户体验十分的糟糕。...
  • lcyStudy
  • lcyStudy
  • 2015年12月13日 19:36
  • 1331

iOS开发实战——CollectionView点击事件与键盘隐藏结合案例

在我们的实际开发中,CollectionView是一种非常实用而又稍难的控件,如果想要在复杂的场景下使用,则需要考虑的比较全面。如果又在CollectionView添加其他的控件,比如在cell里面再...
  • CHENYUFENG1991
  • CHENYUFENG1991
  • 2016年06月05日 13:06
  • 5066

解决React Native中ScrollView中控件获得焦点及点击空白处键盘消失的问题

大家好,今天讲下在开发RN过程中使用ScrollView控件出现的问题。 最初的开发需求是显示一个界面,这个界面有两个特点: 1)纵向很长,显示的内容有点多 2)界面的下半部分中有TextInpu...
  • wwt831208
  • wwt831208
  • 2017年01月24日 10:03
  • 5202

关于Edittext点击弹出软键盘,布局上移标题消失问题,微信聊天界面

最近遇到了关于软键盘弹出,布局上移动的解决                                  当edittext获取焦点呢,弹出软键盘,布局上移,标题位置不变, 1,取消acti...
  • qq_31469369
  • qq_31469369
  • 2016年06月28日 13:53
  • 1501

点击屏幕空白处让键盘消失的方法

创建一个基于Singal View Application 的工程在.xib文件中拖入一个Text Field控件和一个Round Rect Button 控件关键的一步,            ...
  • zhuzhu_2005
  • zhuzhu_2005
  • 2013年09月13日 13:51
  • 880

解決PullToRefreshListView点击空白处让键盘消失

重写这个ListView,红色标记的是我添加的部分: /********************************************************************...
  • xiaoke815
  • xiaoke815
  • 2014年12月18日 10:27
  • 1220

点击屏幕空白处让键盘消失的方法

创建一个基于Singal View Application 的工程在.xib文件中拖入一个Text Field控件和一个Round Rect Button 控件关键的一步,              ...
  • chaoyuan899
  • chaoyuan899
  • 2013年09月12日 19:59
  • 4140

点击空白处,软键盘消失

一般直接使用如下方式即可 Java代码 @Override public boolean onTouchEvent(MotionEvent event) { ...
  • a_sid
  • a_sid
  • 2017年08月04日 10:47
  • 162
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ScrollView里面的EditText的点击空白处键盘消失的问题
举报原因:
原因补充:

(最多只允许输入30个字)