Android 全屏视频播放器-导航栏后面的mediacontroller

Android 全屏视频播放器-导航栏后面的mediacontroller,android,fullscreen,android-videoview,Android,Fullscreen,Android Videoview,我有一个mediacontroller的问题,它隐藏在导航栏后面(ICS上的软导航键)。起初是正常的(第一张图片),但当导航栏第一次隐藏时,mediacontroller会调整大小以适应屏幕(正确),但当导航栏再次出现时,mediacontroller不会重新调整大小(第二张图片)。此外,广告也被移到后面(隐藏用于截图) 如果我了解正确的fitsSystemWindows文档,则应负责调整大小。但它不起作用 我该怎么做?谢谢你的帮助 我正在Galaxy Nexus上测试这个 XML布局: <

我有一个mediacontroller的问题,它隐藏在导航栏后面(ICS上的软导航键)。起初是正常的(第一张图片),但当导航栏第一次隐藏时,mediacontroller会调整大小以适应屏幕(正确),但当导航栏再次出现时,mediacontroller不会重新调整大小(第二张图片)。此外,广告也被移到后面(隐藏用于截图)

如果我了解正确的fitsSystemWindows文档,则应负责调整大小。但它不起作用

我该怎么做?谢谢你的帮助

我正在Galaxy Nexus上测试这个

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"/>


更新:如果您有相同的问题,请检查接受答案中的注释。对于需要全屏显示的视图,请使用sammyboy代码。多亏了这两个。很抱歉,我需要太多时间来解决这个问题,无法给您打分:(

使用
bringToFront()
对于位于顶部的视图

由于
视频视图
s是
表面视图
s,因此它们的行为与正常的
视图
不同。您需要通过指定以下项来确保其保持在背景中:

videoview.setZOrderMediaOverlay(false);

这是系统栏问题。某些设备填充父实体或匹配父实体的屏幕大小为全屏幕,无法识别系统栏的宽度和高度。 我建议:以编程方式为视图指定一个整数值(计算系统栏的宽度和高度),并从屏幕大小中删除sb的宽度或高度(横向或纵向模式) 并将此值设置为视图

如何获取屏幕尺寸等问题的答案请参见:


在包含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);

这没有帮助:(我已经用图片更新了第一篇文章,以便更好地了解问题所在。谢谢,我已经有了这篇文章。第一篇我隐藏了一个导航栏(好的,有点不同),第二篇我调整视频大小以匹配全屏。但是我有一个问题,控件也匹配全屏,但它们不应该太宽(应该尊重导航栏)。在平板电脑上,导航栏太低,并且覆盖导航栏也是一个问题。我认为fitsSystemWindows应该以某种方式解决这个问题,但我不知道如何解决:(我也尝试过这个,但没有帮助……也许我做错了什么。如果我是对的,这是针对z顺序surafce视图的。我只有一个(VideoView),我认为这不是z顺序的问题,而是控件大小的问题(检查comment@Samyboy89)。使用这种方法,我可以通过导航栏获得大小(1184x720)。获得真实大小(1280x720)我需要调用rawWidth(在Samyboy89文章中)。但是如果我将控件Widt设置为显示宽度,那么导航栏就可以了。但是如果它们位于底部(平板电脑),那么它们就隐藏在后面:(Mediacontroller应该知道导航栏,但我不知道如何解决这个问题:(我对此进行了更多的研究。android:fitsSystemWindows只有在活动不是全屏时才能工作;这里我遇到了一个问题。在这种情况下,唯一的解决方案是设置程序的宽度和高度,并将重力设置为左上角(如你所说)。很抱歉,我不能再给你打分了:(你是如何准备如上所述的视频屏幕的。你能指导我构建如上所述的媒体控制器吗?正如我上面所说,这是一个自定义的VideoView和MediaController。然后我有一个框架布局,它是透明的全屏,包含另外两个视图,顶部和底部,具有固定大小,位于顶部(布局=顶部)和底部。没什么特别:)你能发布你的源代码吗。这对我很有帮助。底部控制:你是如何管理切换屏幕的。
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);
your_framelayout_here.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE |View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);