全屏video播放器 – 导航栏后面的mediacontroller

我有一个隐藏在导航栏后面的mediacontroller的问题(ICS上的软导航键)。 首先是OK(第一张图片),但是当导航栏第一次隐藏时,mediacontroller被resize以适应屏幕(正确),但是当导航栏再次出现时没有resize(第二张图片)。 此外,广告也被移到后面(隐藏屏幕截图)。

如果我理解文档正确的配合系统Windows应该负责resize。 但它不工作。

我怎样才能做到这一点? 谢谢你的帮助。

我正在Galaxy Nexus上testing这个。

XML布局:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/playerLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:animateLayoutChanges="true" android:background="@color/black" > <mynamespace.BKDVideoView android:id="@+id/videoview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"/> <mynamespace.SubtitleTextView android:id="@+id/subtitleText" style="@style/SubtitleOverlayText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|center_horizontal" android:layout_marginBottom="30dp" android:gravity="center" android:visibility="gone" android:fitsSystemWindows="true" android:animateLayoutChanges="true"/> <FrameLayout android:id="@+id/adLayout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top|right" android:fitsSystemWindows="true" android:animateLayoutChanges="true"/> <FrameLayout android:id="@+id/videoMediaControllerHolder" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" android:animateLayoutChanges="true"/> 

BKDVideoView是从VideoView的GrepCode复制的一些自定义。 我为MediaController做了同样的事情。 在MediaController中,我打电话给那样的人:

 int newVis = SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | SYSTEM_UI_FLAG_LAYOUT_STABLE; if (!visible) { newVis |= SYSTEM_UI_FLAG_LOW_PROFILE | SYSTEM_UI_FLAG_FULLSCREEN | SYSTEM_UI_FLAG_HIDE_NAVIGATION; } // mSystemUiHolder -> FrameLayout (playerLayout) mSystemUiHolder.setSystemUiVisibility(newVis); 

没事的时候当它覆盖

更新:如果你有同样的问题,请检查接受的答案也评论。 对于需要全屏使用sammyboy代码的视图。 感谢两个。 对不起,我需要太多的时间来解决这个问题,不能给你点:(

Solutions Collecting From Web of "全屏video播放器 – 导航栏后面的mediacontroller"

这是系统问题。 一些设备fill_parent或match_parent实体具有完整的屏幕尺寸,不识别系统的宽度和高度。 我build议:以编程方式给一个整数值的意见。 (计算系统栏的宽度和高度)。 并从屏幕大小中删除sb的宽度或高度(横向或纵向模式),并将此值设置为视图。

这里的答案如何获得屏幕尺寸等

看看这个: http : //bin-liu.blogspot.no/2012/03/how-to-hide-and-display-navigation-bar.html

 public void onLayoutClicked(View v) { view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); } 

 Display display = getWindowManager().getDefaultDisplay(); Method mGetRawH = Display.class.getMethod("getRawHeight"); Method mGetRawW = Display.class.getMethod("getRawWidth"); int rawWidth = (Integer) mGetRawW.invoke(display); int rawHeight = (Integer) mGetRawH.invoke(display); 

使用bringToFront()作为视图顶部

由于VideoViewSurfaceView ,它们不具有与普通View相同的行为。 您需要通过指定以确保它保持在后台:

 videoview.setZOrderMediaOverlay(false); 

在包含surfaceview的framelayout中添加android:fitsSystemWindows="false"

和这个代码在你的活动中

 your_framelayout_here.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE |View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);