如何避免视频搜索栏上的导航栏覆盖

时间:2015-09-01 01:51:52

标签: android seekbar navigationbar android-fullscreen

我的视频活动的标题位于顶部,SeekBar的媒体控制位于底部。当触发事件被触发时,标题和SeekBar布局都覆盖在SurfaceView上,并且在一定时间后消失。我还实现了沉浸式模式,其中状态和导航栏随标题和SeekBar一起消失。我已设法为状态栏腾出空间,而不会使用以下属性覆盖标题布局。

android:fitsSystemWindows="true"

但是如果我在屏幕底部对我的媒体控件布局使用相同的属性,它就不起作用。结果导航栏覆盖在布局上。我无法弄清楚为什么上面的属性在一个布局上工作正常,而在另一个布局上却没有。我有一个媒体控件的自定义布局,我有一个扩展FrameLayout的类。属性fitSystemWindows不适用于自定义布局吗?请参阅第一个屏幕截图右下方的图标。它被导航栏覆盖,如第二次屏幕截图所示

enter image description here

我已经在下面列出了我的班级文件和布局的一部分。

MediaController.java

public class MediaController extends FrameLayout {

    //Some private fields are declared here

    public MediaController(Context context, boolean useFastForward, boolean useFullScreenButton) {
        super(context);
        ....
    }

    public MediaController(Context context) {
        this(context, true, false);
    }

    @Override
    public void onFinishInflate() {
        if (mRoot != null)
            initControllerView(mRoot);
    }

    //Inflating the layout here
    protected View makeControllerView() {
        LayoutInflater inflate = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mRoot = inflate.inflate(R.layout.media_controller, null);
        ....
        return mRoot;
    }

    //Lot of other methods here

}

media_controller.xml

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:fitsSystemWindows="true"> <!--Using the attribute here-->

    <ImageButton android:id="@+id/pause"
        android:layout_gravity="top"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:background="@android:color/transparent"/>

    <TextView android:id="@+id/time_current"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/white"/>

    <SeekBar
        android:id="@+id/mediacontroller_progress"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:layout_height="32dip" />

    <TextView android:id="@+id/time"
        android:layout_gravity="center_horizontal"
        android:textColor="@color/white"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <ImageButton android:id="@+id/fullscreen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:contentDescription="@string/description" />

</LinearLayout>

1 个答案:

答案 0 :(得分:1)

如果您不需要导航栏,请将其隐藏起来:

// onResume ensures that every time the application is resumed, the nav bar goes away
    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    @Override
    protected void onResume() {

        super.onResume();

        View decorView = getWindow().getDecorView();
        //int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
        int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
        decorView.setSystemUiVisibility(uiOptions);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }

另外,请检查一下:

  
    

在Android 4.1及更高版本中,您可以将应用程序的内容设置为显示在导航栏后面,以便内容不会调整大小     当导航栏隐藏和显示。为此,请使用     SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION。您可能还需要使用     SYSTEM_UI_FLAG_LAYOUT_STABLE可帮助您的应用保持稳定     布局。

  
     

当您使用此方法时,您有责任确保   应用程序UI的关键部分最终不会被覆盖   系统栏。有关此主题的更多讨论,请参阅隐藏   状态栏课程。