项目要求 某个 用户在滚动某个长界面时(用来录入信息),将 键盘隐藏掉;
解决办法:
写 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);
}
}
});