Android VideoView fullscreen with Navigation Bar overlapping controls
Asked Answered
T

1

6

So, I know this has been asked several times, but I cannot get it to work (and the answer seems to change with every Android version). EDIT: I'm testing on Marshmallow, but it would be nice to get it working on Android 4.1+.

What I want is to simply show a fullscreen video, and when the user taps the screen, to show the navigation bar and other media controls/timers. Just like apps like VLC and Youtube are already doing.

I started with the Fullscreen Activity example in Android Studio, so my flags are:

When fullscreen:

private final Runnable mHidePart2Runnable = new Runnable() {
    @SuppressLint("InlinedApi")
    @Override
    public void run() {
        // Delayed removal of status and navigation bar

        // Note that some of these constants are new as of API 16 (Jelly Bean)
        // and API 19 (KitKat). It is safe to use them, as they are inlined
        // at compile-time and do nothing on earlier devices.
        rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
                | View.SYSTEM_UI_FLAG_FULLSCREEN
                | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
    }
};

when showing the navigation bar:

@SuppressLint("InlinedApi")
private void show() {

    // Show the system bar
    rootView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
    mVisible = true;

    // Schedule a runnable to display UI elements after a delay
    mHideHandler.removeCallbacks(mHidePart2Runnable);
    mHideHandler.postDelayed(mShowPart2Runnable, UI_ANIMATION_DELAY);
}

And here is what I want and what I get:

enter image description here

And here is my layout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff000000"
    android:id="@+id/layout_play_video"
    tools:context="com.nttdata.videoplaylist.PlayVideoActivity">

    <VideoView
        android:id="@+id/content_video"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center" />

    <ProgressBar
        android:id="@+id/loading_pb"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_gravity="center|center"
        android:progressDrawable="@drawable/loading"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />

    <RelativeLayout
        android:id="@+id/fullscreen_content_controls"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal|bottom"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" >

        <TextView
            android:id="@+id/content_video_time_current"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:shadowColor="@android:color/black"
            android:text="@string/content_duration"
            android:textColor="#ffffffff"
            android:textSize="30sp"
            android:layout_marginLeft="25dp"
            android:layout_marginStart="25dp"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />

        <TextView
            android:id="@+id/content_video_time_total"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:shadowColor="@android:color/black"
            android:text="@string/content_duration"
            android:textColor="#ffffffff"
            android:textSize="30sp"
            android:layout_marginRight="25dp"
            android:layout_marginEnd="25dp"
            android:layout_gravity="end|bottom"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true" />

        <ProgressBar
            android:id="@+id/content_video_progress"
            android:layout_width="match_parent"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_height="50dp"
            android:layout_marginLeft="60dp"
            android:layout_marginStart="60dp"
            android:layout_marginRight="60dp"
            android:layout_marginEnd="60dp"
            android:layout_toStartOf="@id/content_video_time_total"
            android:layout_toLeftOf="@id/content_video_time_total"
            android:layout_toEndOf="@id/content_video_time_current"
            android:layout_toRightOf="@id/content_video_time_current"
            android:layout_alignParentBottom="true" />

    </RelativeLayout>
</RelativeLayout>
Tardif answered 21/3, 2016 at 16:26 Comment(0)
C
0

I'm curious about where your rootView from. Permanently hide navigation bar on activity check this out.

View decorView = getWindow().getDecorView();

try decorView instead of rootView.

Cobbler answered 8/6, 2016 at 2:50 Comment(1)
Sorry, nothing changed :(Tardif

© 2022 - 2024 — McMap. All rights reserved.