CoordinatorLayout儿童不是全屏

Lam*_*rak 7 android android-layout android-design-library android-coordinatorlayout

我有一个Activity全屏显示.这与我尝试过的许多布局完美配合,除非CoordinatorLayout是根ViewGroup.它CoordinatorLayout本身的宽度和高度都设置为match_parent它,它需要整个屏幕.但是,子视图应该与CoordinatorLayout放置的大小相同,就像导航栏仍然可见一样.

问题的插图

有没有办法让孩子的视图调整大小CoordinatorLayout?显然fitSystemWindows不会改变一件事,因为这可能是由CoordinatorLayout实施引起的,其他ViewGroups工作也很好.我曾尝试创建自定义Behavior类,但我没有成功.

我用这段代码制作Activity全屏:

@Override
protected void onResume() {
    super.onResume();
    int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
    getWindow().getDecorView().setSystemUiVisibility(uiOptions);
}
Run Code Online (Sandbox Code Playgroud)

这是用于生成图像的简单布局:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:background="#F00">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        android:scaleType="centerCrop"
        android:src="@drawable/background_sky_light" />

</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

小智 5

变化安卓:fitsSystemWindows为false,如果你正在使用coodinatorlayout android:fitsSystemWindows="false


小智 0

我遇到了类似的问题,不得不想出一些解决方案。我的 CoordinatorLayout 子视图不是 ImageView,而是用于流式传输视频。由于我在旋转期间流式传输视频,因此我需要监视 configChanges 并覆盖 onConfigurationChanged。如果您不想覆盖 onConfigurationChanged,这可能对您不起作用,但它可能会起作用。就像我说的,这有点麻烦,但对我有用。

我最终完全展开工具栏,存储偏移量,然后隐藏它(将其视为标准视图)。然后,当我向后旋转时,我会将其大小调整为用户旋转设备时的偏移量。

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        showToolbar();
        mViewPager.setVisibility(View.VISIBLE);

    } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        hideToolbar();
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        mViewPager.setVisibility(View.GONE);
    }
}

public void hideToolbar()
{
    setCurrentOffset();
    expandToolbarToHeight(0);
    findViewById(R.id.toolbar).setVisibility(View.GONE);
}

public void showToolbar()
{
    expandToolbarToHeight(oldOffset);
    findViewById(R.id.toolbar).setVisibility(View.VISIBLE);
}

public void setCurrentOffset() {
    CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams();
    AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior();
    if (behavior != null) {
        oldOffset = behavior.getTopAndBottomOffset();
    }
}

public void expandToolbarToHeight(int height) {
    CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams();
    AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior();
    if (behavior != null) {
        behavior.setTopAndBottomOffset(height);
        behavior.onNestedPreScroll(mCoordinatorLayout, mAppBarLayout, null, 0, 1, new int[2]);
    }
}
Run Code Online (Sandbox Code Playgroud)