最近項(xiàng)目里面要用到鍵盤,并且要控制鍵盤的關(guān)閉和彈起。在網(wǎng)上查了好多資料和事件,總結(jié)下一共有以下幾種方法见间。
1:在activity 中添加 以下代碼
OnGlobalLayoutListener 注冊(cè)后 onGlobalLayout 方法會(huì)一直執(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();
}
}
第三種 個(gè)人覺(jué)得最好用,但是他有個(gè)問(wèn)題就是 在個(gè)別三星機(jī)器上會(huì)彈不出鍵盤篷帅。
以上就是自己項(xiàng)目用到總結(jié)的史侣。希望遇到這種問(wèn)題的同學(xué)拴泌,可以繞過(guò)這個(gè)坑。惊橱。