小技巧:实现ScrollView 滚动键盘隐藏

项目要求 某个 用户在滚动某个长界面时(用来录入信息),将 键盘隐藏掉;

解决办法:
写 MyScrollView ; 提供 滚动监听器;
package com.library.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ScrollView;

/**
* 可以监听滚动的scrollview
*
*/
public class MyScrollView extends ScrollView {
private OnScrollChangedListener2 mOnScrollChangedListener2;

public MyScrollView(Context context) {
    this(context, null);
}

public MyScrollView(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
}

public MyScrollView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

/**
 * scrollview监听回调接口
 */
public interface OnScrollChangedListener2 {
    void onScrollChanged(Boolean isTouchMove, ScrollView who, int l, int t, int oldl, int oldt);
}

@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
    super.onScrollChanged(l, t, oldl, oldt);
    if (mOnScrollChangedListener2 != null) {
        mOnScrollChangedListener2.onScrollChanged(isTouchMove, this, l, t, oldl, oldt);
    }
}

public void setOnScrollChangedListener2(OnScrollChangedListener2 listener2) {
    mOnScrollChangedListener2 = listener2;
}

// isTouchMove ==false;:表示 系统调整界面滚动(键盘弹出挡住输入框时); isTouchMove //==true::表示 手指滚动界面;
public boolean isTouchMove = false;

@Override
public boolean onTouchEvent(MotionEvent ev) {

    if (ev.getAction() == MotionEvent.ACTION_MOVE) {
        isTouchMove = true;

    } else if (ev.getAction() == MotionEvent.ACTION_UP) {
        isTouchMove = false;
    }

    return super.onTouchEvent(ev);
}

}

=========有ScrollView 的界面调用==========

myScrollView.setOnScrollChangedListener2(new OnScrollChangedListener2() {
            @Override
            public void onScrollChanged(Boolean isTouchMove, ScrollView who, int l, int t, int oldl, int oldt) {
                if (isTouchMove) {
                    new Handler().postDelayed(new Runnable() {
        @Override
                        public void run() {
                            //调用隐藏键盘;
``
InputMethodManager imm = (InputMethodManager) context.getSystemService(context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(context.getWindow().getDecorView().getWindowToken(), 0);
                    }
                }, 10);
            }
        }
    });

猜你喜欢

转载自blog.csdn.net/qq_17827919/article/details/52671272
今日推荐