Полноэкранный видеоплеер - mediacontroller за навигационной панелью
У меня проблема с mediacontroller, которая скрыта за навигационной панелью (мягкие навигационные клавиши на ICS). Сначала ОК (первое изображение), но когда панель навигации скрыта в первый раз, 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 - это копия из GrepCode VideoView с некоторыми настройками. Я сделал то же самое для MediaController.
В MediaController я вызываю hidding:
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);
![When it's ok]()
![When it's overlayed]()
Обновление. Если у вас есть такая же проблема, пожалуйста, проверьте также комментарий в принятом ответе. Для просмотров, которые должны быть полноэкранными, используйте код sammyboy. Благодаря обоим. Извините, мне нужно слишком много времени, чтобы понять это и не могу дать вам очки: (
Ответы
Ответ 1
это проблема с системной панелью. В некоторых устройствах объекты fill_parent или match_parent имеют полные экраны и не распознают ширину и высоту панели.
Я предлагаю: программно дать целочисленное значение представлениям. (рассчитать ширину и высоту панели). и удалите ширину или высоту sb (альбомный или портретный режим) с экрана
и установите это значение в представления.
здесь ответ, как получить размеры экрана и т.д.
Ответ 2
Посмотрите на это:
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);
Ответ 3
Используйте bringToFront()
для просмотра в верхней части
Ответ 4
Так как VideoView
являются SurfaceView
s, они не имеют того же поведения, что и обычный View
. Вы должны убедиться, что он остается в фоновом режиме, указав:
videoview.setZOrderMediaOverlay(false);
Ответ 5
добавьте 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);