我的mediacontroller有一个问题,它隐藏在导航栏后面(ICS上的软导航键)。首先是OK(第一张图片),但是当第一次隐藏导航栏时,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"/>
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代码的视图。感谢两者。对不起,我需要太多时间来解决这个问题并且无法给你积分:(
答案 0 :(得分:5)
here答案如何获取屏幕尺寸等。
答案 1 :(得分: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);
答案 2 :(得分:1)
使用bringToFront()
将视图置于顶部
答案 3 :(得分:1)
由于VideoView
是SurfaceView
s,因此它们与普通View
的行为不同。您需要通过指定:
videoview.setZOrderMediaOverlay(false);
答案 4 :(得分:1)
在包含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);