window添加view
WindowManager windowManager = (WindowManager) getApplication().getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics displayMetrics = getWindowMetrics();
mParentViewHeight = getWindowMetrics().heightPixels;
mParentViewWidth = getWindowMetrics().widthPixels;
calculatePosition(displayMetrics.widthPixels, displayMetrics.heightPixels);
int defaultWindowType = WindowManager.LayoutParams.TYPE_TOAST;
if (Build.VERSION.SDK_INT < 19) {
defaultWindowType = WindowManager.LayoutParams.TYPE_PHONE;
}
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
mWidth,
mHeight,
mInitXoffset,
mInitYoffset,
defaultWindowType,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.RGBA_8888);
lp.token = mChild.getWindowToken();
lp.gravity = Gravity.TOP | Gravity.LEFT;
WindowManager.LayoutParams childLp = (WindowManager.LayoutParams) childView.getLayoutParams();
windowManager.addView(childView,childLp);
ac ti vi ty添加view:
FrameLayout root = getRootFrame(activity);
frameLayout = new FrameLayout(activity);
activityParentFrameMap.put(hashCode, frameLayout);
root.addView(frameLayout,fillParentParams);
特别的,为一个activity添加framelayout,这个framelayout事可以点透的,并不会影响activity上的view的行为;
但是在一个window上直接添加framelayout时,这个framelayout会点不透,下面的ac ti vi ty的view将无法响应到点击事件。
原因可能是基于window的framelayout和基于activity建的layout不在同一个view的管理器中,需要深入研究。。。