Android 6.0之前 创建window方法如下:
@SuppressWarnings("rawtypes")
Class policyManagerClass = Class.forName("com.android.internal.policy.PolicyManager");
@SuppressWarnings("rawtypes")
Class[] parameterTypes = { Context.class };
Method method = policyManagerClass.getMethod("makeNewWindow", parameterTypes);
mWindow = (Window) method.invoke(null, mContext);
Android 6.0 以及后续版本,com.android.internal.policy.PolicyManager
已经被删除,所以创建window方法如下:
方法一
Dialog dialog = new Dialog(mContext);
mWindow = dialog.getWindow();
方法二,此方法不适合非手机端
Class windowClass = Class.forName("com.android.internal.policy.PhoneWindow");
Constructor<?> localConstructor = windowClass.getConstructor(new Class[]{Context.class});
mWindow = (Window) localConstructor.newInstance(new Object[]{mContext});
完整代码为:
private void initWindow() {
try {
Dialog dialog = new Dialog(mContext);
mWindow = dialog.getWindow();
mWindow.setFormat(PixelFormat.TRANSLUCENT);
mWindow.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);
mWindow.requestFeature(Window.FEATURE_NO_TITLE);
mWindow.setSoftInputMode(LayoutParams.SOFT_INPUT_ADJUST_RESIZE | LayoutParams.SOFT_INPUT_STATE_HIDDEN);
mWindow.setWindowManager(wm, null, null);
colorDrawable = new ColorDrawable();
colorDrawable.setAlpha(0);
mWindow.setBackgroundDrawable(colorDrawable);
mWindow.setCallback(this);
defindedView = new DefindedView(mContext);
defindedView.addView(mView);
mWindow.setContentView(defindedView.getView());
} catch (Exception e) {
e.printStackTrace();
}
}
参考
网友评论