1.需要在manifest的application中配置
android:supportsRtl="true"
android:allowBackup="true"
2.判断EditText 是否有焦点
EditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus){
keyboardHelper = new KeyboardHelper(LoginActivity.this);
keyboardHelper.onCreate();
keyboardHelper.setOnKeyboardStatusChangeListener(onKeyBoardStatusChangeListener);
}
}
});
3.这里用到两个工具类
第一个:
public class KeyboardHelper {
private Activity activity;
private OnKeyboardStatusChangeListener onKeyboardStatusChangeListener;
private int windowBottom = -1;
private int keyboardHeight = 0;
public KeyboardHelper(Activity activity) {
this.activity = activity;
activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
if (activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
public void onCreate() {
View content = activity.findViewById(android.R.id.content);
// content.addOnLayoutChangeListener(listener); 这个方法有时会出现一些问题
content.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener);
}
public void onDestroy() {
View content = activity.findViewById(android.R.id.content);
ViewUtils.removeOnGlobalLayoutListener(content, onGlobalLayoutListener);
}
private ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect rect = new Rect();
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
Log.e("KeyboardHelper", "onGlobalLayout: " + rect + ", " + windowBottom);
int newBottom = rect.bottom;
if (windowBottom != -1 && windowBottom != newBottom) {
if (newBottom < windowBottom) {
// keyboard pop
keyboardHeight = windowBottom - newBottom;
if (onKeyboardStatusChangeListener != null) {
onKeyboardStatusChangeListener.onKeyboardPop(keyboardHeight);
}
} else {
// keyboard close
if (onKeyboardStatusChangeListener != null) {
onKeyboardStatusChangeListener.onKeyboardClose(keyboardHeight);
}
}
}
windowBottom = newBottom;
}
};
public void setOnKeyboardStatusChangeListener(
OnKeyboardStatusChangeListener onKeyboardStatusChangeListener) {
this.onKeyboardStatusChangeListener = onKeyboardStatusChangeListener;
}
public interface OnKeyboardStatusChangeListener {
void onKeyboardPop(int keyboardHeight);
void onKeyboardClose(int keyboardHeight);
}
}
第二个
public class ViewUtils {
public static void removeOnGlobalLayoutListener(View view, ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener) {
if (Build.VERSION.SDK_INT < 16) {
view.getViewTreeObserver().removeGlobalOnLayoutListener(onGlobalLayoutListener);
} else {
view.getViewTreeObserver().removeOnGlobalLayoutListener(onGlobalLayoutListener);
}
}
}