要实现Android键盘/输入法切换的监听器,可以使用以下步骤:
public class KeyboardChangeListener implements ViewTreeObserver.OnGlobalLayoutListener {
private final View rootView;
private final OnKeyboardChangeListener listener;
private boolean isKeyboardShowing = false;
private int keyboardHeight = 0;
public interface OnKeyboardChangeListener {
void onKeyboardShow(int keyboardHeight);
void onKeyboardHide();
}
public KeyboardChangeListener(View rootView, OnKeyboardChangeListener listener) {
this.rootView = rootView;
this.listener = listener;
rootView.getViewTreeObserver().addOnGlobalLayoutListener(this);
}
@Override
public void onGlobalLayout() {
Rect rect = new Rect();
rootView.getWindowVisibleDisplayFrame(rect);
int screenHeight = rootView.getRootView().getHeight();
int heightDifference = screenHeight - rect.bottom;
if (heightDifference > 200) { // 超过200像素则认为是键盘显示
if (!isKeyboardShowing) {
isKeyboardShowing = true;
keyboardHeight = heightDifference;
if (listener != null) {
listener.onKeyboardShow(keyboardHeight);
}
}
} else {
if (isKeyboardShowing) {
isKeyboardShowing = false;
if (listener != null) {
listener.onKeyboardHide();
}
}
}
}
public void removeListener() {
rootView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
}
public class MainActivity extends AppCompatActivity implements KeyboardChangeListener.OnKeyboardChangeListener {
private KeyboardChangeListener keyboardChangeListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View rootView = getWindow().getDecorView().findViewById(android.R.id.content);
keyboardChangeListener = new KeyboardChangeListener(rootView, this);
}
@Override
public void onKeyboardShow(int keyboardHeight) {
// 键盘显示时的操作
}
@Override
public void onKeyboardHide() {
// 键盘隐藏时的操作
}
@Override
protected void onDestroy() {
super.onDestroy();
if (keyboardChangeListener != null) {
keyboardChangeListener.removeListener();
}
}
}
在onKeyboardShow和onKeyboardHide方法中,可以进行相应的操作,例如调整布局、滚动内容等。注意在Activity或Fragment销毁时,移除监听器以避免内存泄漏。
这样,当键盘显示或隐藏时,就会触发相应的回调方法,你可以在这些方法中进行相应的处理。