Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Reproductor de video en pantalla completa – mediacontroller detrás de la barra de navegación

Tengo un problema con mediacontroller que está oculto detrás de la barra de navegación (teclas de navegación suave en ICS). Al principio está bien (primera imagen), pero cuando se oculta la barra de navegación por primera vez, mediacontroller se redimensiona para ajustarse a la pantalla (correcta), pero no se redimensiona cuando aparece la barra de navegación nuevamente (segunda imagen). También el anuncio se mueve detrás (ocultado para la captura de pantalla).

Si comprendo la documentación correcta fitsSystemWindows debería ser responsable de cambiar el tamaño. Pero no está funcionando.

¿Cómo puedo hacer eso? Gracias por cualquier ayuda.

Estoy probando esto en Galaxy Nexus.

Diseño 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 es una copia de GrepCode de VideoView con algunas personalizaciones. Hice lo mismo para MediaController. En MediaController estoy llamando a hidding así:

 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); 

Cuando esté bienCuando está superpuesto

Actualización: En caso de que tenga el mismo problema, por favor, marque también el comentario en la respuesta aceptada. Para las vistas que necesita ser el código de sammyboy de la pantalla completa. Gracias a ambos. Lo siento, que necesito demasiado tiempo para averiguar esto y no podría darle puntos 🙁

  • Videoview de pantalla completa sin alargar el video
  • Vídeo en directo de un teléfono android a otro a través de WiFi
  • Transmisión de vídeo de la cámara Android al servidor
  • Aplicación de streaming de video en vivo en Android
  • 5 Solutions collect form web for “Reproductor de video en pantalla completa – mediacontroller detrás de la barra de navegación”

    Este es el problema de la barra del sistema. Algunos dispositivos fill_parent o match_parent entidades tiene pantallas completas y no reconocen el ancho y la altura de la barra del sistema. Sugiero que: programáticamente dar un valor entero a las vistas. (Calcular el ancho y la altura de la barra del sistema). Y elimine el ancho o la altura de sb (modo horizontal o vertical) de la pantalla y establezca este valor en las vistas.

    Aquí la respuesta a cómo obtener dimensiones de pantalla etc.

    Mire esto: 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); 

    Use bringToFront() para que las vistas estén en la parte superior

    Dado que los VideoView son SurfaceView s, no tienen el mismo comportamiento que una View normal. Debe asegurarse de que permanece en segundo plano especificando:

     videoview.setZOrderMediaOverlay(false); 

    Add android:fitsSystemWindows="false" dentro de su framelayout que contienen la vista de superficie.

    Y este código dentro de su actividad

     your_framelayout_here.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE |View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.