最近項目里面要用到鍵盤,并且要控制鍵盤的關(guān)閉和彈起。在網(wǎng)上查了好多資料和事件,總結(jié)下一共有以下幾種方法。
1:在activity 中添加 以下代碼
OnGlobalLayoutListener 注冊后 onGlobalLayout 方法會一直執(zhí)行,處理完自己的邏輯后血要remove
finalView activityRootView = findViewById(R.id.activityRoot);
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override?
public void onGlobalLayout() {
int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();
if(heightDiff > dpToPx(this,200)) {// 顯示軟鍵盤}else{//隱藏軟鍵盤}
}
});
2:第二種 也是我現(xiàn)在才用的方法
自定義 最外層的 View ,然后重寫 onSizeChanged(int w, int h, int oldw, int oldh)方法。
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w,h,oldw,oldh);
if(listener!=null){
if(oldh > h) {
listener.show();
}else{
listener.hidden();
}
}
}
3:第三種方法 自定義 EditText
public class MyEditText extends EditText {
public MyEditText(Context?context)?{
super(context);
}
private OnFinishComposingListener?mFinishComposingListener;
public void setOnFinishComposingListener(OnFinishComposingListener?listener)?{
this.mFinishComposingListener?=?listener;
}
@Override
public InputConnection?onCreateInputConnection(EditorInfo?outAttrs)?{
return newMyInputConnection(super.onCreateInputConnection(outAttrs),false);
}
public class MyInputConnection extends InputConnectionWrapper?{
public MyInputConnection(InputConnection?target,booleanmutable)?{
super(target,?mutable);
}
@Override
public boolean finishComposingText()?{
boolean finishComposing?=super.finishComposingText();
if(mFinishComposingListener?!=null)?{
mFinishComposingListener.finishComposing();
}
returnfinishComposing;
}
}
public interface OnFinishComposingListener?{
public void finishComposing();
}
}
第三種 個人覺得最好用,但是他有個問題就是 在個別三星機器上會彈不出鍵盤。
以上就是自己項目用到總結(jié)的。希望遇到這種問題的同學(xué),可以繞過這個坑。。