15

我对隐藏在导航栏后面的媒体控制器有疑问(ICS 上的软导航键)。起初是好的(第一张图片),但是当导航栏第一次隐藏时,媒体控制器被调整大小以适应屏幕(正确),但当导航栏再次出现时(第二张图片)没有调整大小。广告也被移到后面(隐藏屏幕截图)。

如果我理解文档正确, 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"/>

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 代码。感谢双方。抱歉,我需要太多时间来解决这个问题,无法给你积分:(

4

5 回答 5

5

这是系统栏问题。某些设备的 fill_parent 或 match_parent 实体具有完整的屏幕尺寸,并且无法识别系统栏的宽度和高度。我建议:以编程方式为视图赋予一个整数值。(计算系统栏的宽度和高度)。并从屏幕尺寸中删除某人的宽度或高度(横向或纵向模式)并将此值设置为视图。

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

于 2012-11-14T11:25:37.053 回答
4

看看这个: 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);
于 2012-11-14T17:10:53.257 回答
1

用于bringToFront()视图位于顶部

于 2012-11-05T18:04:03.123 回答
1

由于VideoViews 是SurfaceViews,因此它们的行为与普通 s 不同View。您需要通过指定以下内容来确保它保留在后台:

videoview.setZOrderMediaOverlay(false);
于 2012-11-13T16:00:39.077 回答
1

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);
于 2015-02-23T19:08:06.620 回答