如果半透明导航为真,则AppBarLayout中的工具栏不会滚动

时间:2016-03-25 16:50:42

标签: android scroll navigation-drawer android-toolbar android-coordinatorlayout

更新:此处为example app。我已经在我的Nexus 6P,Android 6.0.1上测试了它。

我正在使用CoordinatorLayoutRecyclerView。 如果<item name="android:windowTranslucentNavigation">true</item>工具栏没有隐藏(但它本身可以滚动)。 appcompat是v7:23.2.1

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

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</android.support.design.widget.CoordinatorLayout>

如果我将android:fitsSystemWindows="true"添加到AppBarLayout,则可以解决一些问题。

有没有解决方案?

系统栏覆盖工具栏 enter image description here

有顶部和底部填充 enter image description here

CoordinatorLayout(也许)滚动工具栏 enter image description here

1 个答案:

答案 0 :(得分:2)

似乎这是一个错误。我找到了解决问题的临时解决方案。

摆脱协调器布局及其子节目中的所有 android:fitsSystemWindows ,或将其设置为 false 。然后在您的活动中手动将状态栏的高度添加到工具栏的高度和顶部填充:

toolbar.setPadding(0, getStatusBarHeight(), 0, 0);
toolbar.getLayoutParams().height = toolbar.getLayoutParams().height + getStatusBarHeight();

获取状态栏高度的方法:

public int getStatusBarHeight() {
    int height = 0;
    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        height = getResources().getDimensionPixelSize(resourceId);
    }
    return height;
}

通过这些更改,工具栏可以正确滚动,并且具有适当的高度。