美文网首页
Android监听软键盘收起与弹出

Android监听软键盘收起与弹出

作者: 刘小厨 | 来源:发表于2018-05-10 17:37 被阅读37次

    在项目中有时候会需要监听软键盘的弹出与收起,并没有找到官方的API,所以根据网上的思路,自定义View来实现监听.
    并不复杂直接上代码吧:

       
       import android.content.Context;
       import android.graphics.Rect;
       import android.util.AttributeSet;
       import android.view.LayoutInflater;
       import android.view.View;
       import android.view.ViewTreeObserver;
       import android.widget.LinearLayout;
       
       public class MeasuredLayout extends LinearLayout {
       
           private int largestHeight;
       
           private OnKeyboardHideListener onKeyboardHideListener;
           private int heightPrevious;
           private int heightNow;
           private View mChildOfContent;
           private int usableHeightPrevious;
       
           public MeasuredLayout(Context context, View view){
               super(context);
               addView(view);
           }
       
           public MeasuredLayout(Context context, AttributeSet attrs, int layoutId) {
               super(context, attrs);
               LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
               layoutInflater.inflate(layoutId, this);
               mChildOfContent=getChildAt(0);
               mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                   @Override
                   public void onGlobalLayout() {
                       possiblyResizeChildOfContent();
                   }
               });
           }
       
           private void possiblyResizeChildOfContent() {
               int usableHeightNow = computeUsableHeight();
               if (usableHeightNow != usableHeightPrevious) {
                   int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();
                   int heightDifference = usableHeightSansKeyboard - usableHeightNow;
                   if (heightDifference > (usableHeightSansKeyboard / 4)) {
                       // 键盘弹出
                       if (onKeyboardHideListener != null) {
                           onKeyboardHideListener.onKeyboardHide(false);
                       }
                   } else {
                       // 键盘收起
                       if (onKeyboardHideListener != null) {
                           onKeyboardHideListener.onKeyboardHide(true);
                       }
                   }
                   usableHeightPrevious = usableHeightNow;
               }
           }
       
           private int computeUsableHeight() {
               Rect r = new Rect();
               mChildOfContent.getWindowVisibleDisplayFrame(r);
               return (r.bottom - r.top);
           }
       
         
       
           public interface OnKeyboardHideListener {
               void onKeyboardHide(boolean hide);
           }
       
           public void setOnKeyboardHideListener(OnKeyboardHideListener onKeyboardHideListener) {
               this.onKeyboardHideListener = onKeyboardHideListener;
           }
       }
    

    使用的时候很简单:
    只需要

     public View getContentView() {
            MeasuredLayout measuredLayout = new MeasuredLayout(this, null, R.layout.activity_apply_cash);
            measuredLayout.setOnKeyboardHideListener(this);
            return measuredLayout;
        }
    

    将该方法返回的View塞给Activity的 setContentView();方法.
    并在使用监听的Activity实现MeasuredLayout.OnKeyboardHideListener 接口并重写方法

     @Override
        public void onKeyboardHide(boolean hide) {
            isKeyboardHide=hide;
            if(hide){
            //这里我们就可以拿到软键盘是否隐藏了
            }
    
        }
    ``

    相关文章

      网友评论

          本文标题:Android监听软键盘收起与弹出

          本文链接:https://www.haomeiwen.com/subject/zmltdftx.html