关于软键盘的处理,理论上适应各种情况

如果有问题请联系我,但我不一定在

放关键代码

public class KeyboardDialog extends BaseAlertDialog implements ViewTreeObserver.OnGlobalLayoutListener {

private Object mObject;

public KeyboardDialog(Context context) {
   this(context, R.style.style_Dialog_Fullscreen);
   getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
   setCanceledOnTouchOutside(false);// 设置不能点击对话框外边取消当前对话框
}

protected KeyboardDialog(Context context, int themeResId) {
   super(context, themeResId);
   getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
   setCanceledOnTouchOutside(false);// 设置不能点击对话框外边取消当前对话框
}

@Override
protected void initData() {
   super.initData();
   convertView.getViewTreeObserver().addOnGlobalLayoutListener(this);
}

public void setObject(Object object) {
   mObject = object;
}

@Override
protected int getLayoutRes() {
   return R.layout.dlg_point;
}

@Override
public void onGlobalLayout() {
   int   heightPixels = getContext().getResources().getDisplayMetrics().heightPixels;
   int[] outLocation  = new int[2];
   convertView.getLocationOnScreen(outLocation);
   int y = outLocation[1] + convertView.getHeight();
   if (y != heightPixels) {
      KeyboardHelper.getIns().onKeyboardHeightChange(mObject, true, heightPixels - y);
   } else {
      KeyboardHelper.getIns().onKeyboardHeightChange(mObject, false, heightPixels - y);
   }
}

@Override
protected void initViews(View convertView) {
   getWindow().getAttributes().width = WindowManager.LayoutParams.MATCH_PARENT;
   getWindow().getAttributes().gravity = Gravity.BOTTOM;
}

@Override
public void dismiss() {
   super.dismiss();
   if (convertView != null) {
      convertView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
   }
}
}

你可能感兴趣的:(关于软键盘的处理,理论上适应各种情况)