CollapsingToolbarLayout / 工具栏边距错误

CollapsingToolbarLayout / Toolbar margin bug

我想在我的应用中使用类似于@chrisbanses cheesesquare (https://github.com/chrisbanes/cheesesquare) 的布局。

在 Nexus 5,6 上一切正常。但是当你在三星 S6、索尼 Z3 Compact 等其他设备上测试时,工具栏中的按钮不可见。

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="@dimen/detail_backdrop_height"
    android:fitsSystemWindows="true"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsing_toolbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        app:contentScrim="?attr/colorPrimary"
        app:expandedTitleMarginEnd="64dp"
        app:expandedTitleMarginStart="48dp"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

        <ImageView
            android:id="@+id/backdrop"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            android:scaleType="centerCrop"
            android:src="@drawable/default_vehicle"
            app:layout_collapseMode="parallax" />

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_collapseMode="pin"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

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

这是我的布局。我找不到解决这个问题的方法。您可以在 phone 上尝试 运行 Cheesesquare,就像三星 S 5.0.2 Android 一样。我还测试了索尼设备。相同。 Nexus phone 没问题。

你知道如何解决这个问题吗?

我正在使用 com.android.support:design:22.2.0(最新版本)

好的。我得到了确认。这是设计支持库 22.2.0 中的错误。 更多信息: https://code.google.com/p/android/issues/detail?id=176647

如果您在 Google 发布修复程序之前知道任何解决方法,我将不胜感激。

工具栏和缺少按钮的问题(位置错误)有一个解决方法

if (Build.VERSION.SDK_INT != 21) return; 

final int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
final int result = (resourceId > 0) ? getResources().getDimensionPixelSize(resourceId) * 2 : 0;
final CollapsingToolbarLayout.LayoutParams params =
        (CollapsingToolbarLayout.LayoutParams) toolbar.getLayoutParams();
params.topMargin -= result;
toolbar.setLayoutParams(params);

编辑: Google 更新了支持库。此错误已在 22.2.1 版本中修复。只需更新支持库并使用最新版本就可以了。

if ("samsung".equals(Build.MANUFACTURER) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        Toolbar toolbar = getToolbar();
        ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) toolbar.getLayoutParams();
        lp.topMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, -47, getResources().getDisplayMetrics());
        toolbar.setLayoutParams(lp);
    }