Android監聽輸入法彈窗的實現

輸入法彈出界面

用過ios的都知道ios上輸入法關閉的同時會自動關閉輸入框,那麼在android上如何實現監聽輸入法彈出和關閉呢?本篇文章就爲你提供了一種可靠的實現方式。html

演示效果視頻地址android

首先在AndroidManifest中配置

android:windowSoftInputMode="adjustResize"

這樣每次輸入法彈出和關閉都會從新計算高度實現把佈局頂上去的效果ios

而後咱們要自定義一個佈局,監聽佈局大小變化

public class CheckSoftInputLayout extends FrameLayout {
    private OnResizeListener mOnResizeListener;
    public CheckSoftInputLayout(Context context) {
        super(context);
    }
    public CheckSoftInputLayout(Context context, AttributeSet attrs) {
        super(context, attires);
    }
    public CheckSoftInputLayout(Context context, AttributeSet attrs, int 
        defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    @TargetApi(21)
    public CheckSoftInputLayout(Context context, AttributeSet attrs, int
        defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, old);
        if (mOnResizeListener != null) {
            mOnResizeListener.onResize(w, h, oldw, old);
        }
    }
    public void setOnResizeListener(OnResizeListener listener) { 
        this.mOnResizeListener = listener;
    }
    public interface OnResizeListener {
        void onResize(int w, int h, int oldw, int old);
    }
}

##而後把上面的自定義佈局做爲跟佈局放到你須要的Activity中去,而後在Activity中綁定監聽事件git

mRootLayout.setOnResizeListener(this);
@Override
public void onResize(int w, int h, int oldw, int oldh) {
    //若是第一次初始化
    if (oldh == 0) {
        return;
    }
    //若是用戶橫豎屏轉換
    if (w != oldw) {
        return;
    }
    if (h < oldh) {
        //輸入法彈出
    } else if (h > oldh) {
        //輸入法關閉
        setCommentViewEnabled(false, false);
    }
    int distance = h - old;
    EventBus.getDefault().post(new InputMethodChangeEvent(distance,mCurrentImageId));
}

這樣只要輸入法彈出和關閉就能自動實現監聽,達到關閉輸入框的效果,這樣就和蘋果的體驗很一致。 到這裏就介紹完了,若是有什麼好的思路,也歡迎評論分享點贊! [Github demo地址](https://github.com/gupengcheng/CheckSoftInputDemo)github

相關文章
相關標籤/搜索