文章目录
设置flags是否包含某些flag
1666 if (!mFocusable) {
1667 curFlags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
1668 if (mInputMethodMode == INPUT_METHOD_NEEDED) {
1669 curFlags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
1670 }
1671 } else if (mInputMethodMode == INPUT_METHOD_NOT_NEEDED) {
1672 curFlags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
1673 }
1674 if (!mTouchable) {
1675 curFlags |= WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
1676 }
1677 if (mOutsideTouchable) {
1678 curFlags |= WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
1679 }
1680 if (!mClippingEnabled || mClipToScreen) {
1681 curFlags |= WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
1682 }
1683 if (isSplitTouchEnabled()) {
1684 curFlags |= WindowManager.LayoutParams.FLAG_SPLIT_TOUCH;
1685 }
1686 if (mLayoutInScreen) {
1687 curFlags |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
1688 }
1689 if (mLayoutInsetDecor) {
1690 curFlags |= WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR;
1691 }
1692 if (mNotTouchModal) {
1693 curFlags |= WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
1694 }
1695 if (mAttachedInDecor) {
1696 curFlags |= WindowManager.LayoutParams.FLAG_LAYOUT_ATTACHED_IN_DECOR;
1697 }
设置gravity
取决于mGravity和mIsDropdown && (mClipToScreen || mClippingEnabled)
mGravity可在showAtLocation中设置
mIsDropdown可以通过set方法直接设置,也可通过调用showAtLocation(设置为false)或调用showAsDropDown(设置为true)
mClipToScreen和mClippingEnabled通过set方法设置
1596 private int computeGravity() {
1597 int gravity = mGravity == Gravity.NO_GRAVITY ? Gravity.START | Gravity.TOP : mGravity;
1598 if (mIsDropdown && (mClipToScreen || mClippingEnabled)) {
1599 gravity |= Gravity.DISPLAY_CLIP_VERTICAL;
1600 }
1601 return gravity;
1602 }
设置type
通过调用setWindowLayoutType方法设置
设置softInputMode
通过调用setSoftInputMode设置
设置windwAnimations
取决于mAnimationStyle、mIsDropdown、mAboveAnchor
1702 private int computeAnimationResource() {
1703 if (mAnimationStyle == ANIMATION_STYLE_DEFAULT) {
1704 if (mIsDropdown) {
1705 return mAboveAnchor
1706 ? com.android.internal.R.style.Animation_DropDownUp
1707 : com.android.internal.R.style.Animation_DropDownDown;
1708 }
1709 return 0;
1710 }
1711 return mAnimationStyle;
1712 }
设置width/height
在WindowManager.addView之前设置
主要是取决于mXXX、mXXXMode
mXXXMode可通过调用setWindowLayoutMode设置,可设置为MATCH_PARENT或WRAP_CONTENT
1634 if (mHeightMode < 0) {
1635 p.height = mLastHeight = mHeightMode;
1636 } else {
1637 p.height = mLastHeight = mHeight;
1638 }
1639
1640 if (mWidthMode < 0) {
1641 p.width = mLastWidth = mWidthMode;
1642 } else {
1643 p.width = mLastWidth = mWidth;
1644 }
在WindowManager.addView之后,可通过调用update方法修改
比较新旧值是否相同,不相同再修改
2291 final int finalWidth = mWidthMode < 0 ? mWidthMode : mLastWidth;
2292 if (width != -1 && p.width != finalWidth) {
2293 p.width = mLastWidth = finalWidth;
2294 update = true;
2295 }
2296
2297 final int finalHeight = mHeightMode < 0 ? mHeightMode : mLastHeight;
2298 if (height != -1 && p.height != finalHeight) {
2299 p.height = mLastHeight = finalHeight;
2300 update = true;
2301 }
设置token
调用showAtLocation, 设置为parent.getWindowToken()
调用showAsDropDown,设置为anchor.getApplicatonWindowToken()
设置format
mBackground通过调用setBackgroundDrawable设置
1628 if (mBackground != null) {
1629 p.format = mBackground.getOpacity();
1630 } else {
1631 p.format = PixelFormat.TRANSLUCENT;
1632 }
4945

被折叠的 条评论
为什么被折叠?



