简书链接:android全屏的实现方案1  文章字数:182,阅读全文大约需要1分钟
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39     /**      * @param activity   用来查找根视图      * @param viewGroup  当退出全屏的时候被插入的父节点      * @param anchor     全屏控件      * @param isPortrait 是否是竖屏      */     public static void setOrRemoveAnchorViewToRootView(Activity activity, ViewGroup viewGroup, View anchor, boolean isPortrait) {         FrameLayout contentRootView = (FrameLayout) activity.findViewById(android.R.id.content);         if (contentRootView.getChildAt(0) instanceof FrameLayout) { //            contentRootView = (FrameLayout) contentRootView.getChildAt(0);//这个是真activity布局。         }         boolean requestCloseFull = anchor.getParent() == contentRootView; //        boolean requestFull = anchor.getParent() == viewGroup;//现在布局进行调整了 是一个线性布局,那么父容器变化了。         ((ViewGroup) anchor.getParent()).removeView(anchor);         boolean hasParent = anchor.getParent() != null;         FrameLayout.LayoutParams params = null;         if (isPortrait) {             if (!requestCloseFull) {                 params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, AppContext.getDisplayMetrics().heightPixels);//全屏 写死  isPorrait 不旋转的情况下不写死那么会出问题。??我已经忘记为什么这么写了岁月是一把杀猪刀             } else {                 params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);             }         } else {//要居中还要白屏             params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, requestCloseFull ? ViewGroup.LayoutParams.WRAP_CONTENT : ViewGroup.LayoutParams.MATCH_PARENT);         }         params.gravity = Gravity.CENTER;         if (anchor.getTag(R.id.video_top) != null) {//取消全屏             anchor.setTag(R.id.video_top, null);             viewGroup.addView(anchor);         } else {//全屏             anchor.setTag(R.id.video_top, "qssq");             contentRootView.addView(anchor, contentRootView.getChildCount(), params);//ava.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.         }     }