Сбой CollapsingToolbarLayout

У меня есть RecyclerView, который запускает CollapsingToolbarLayout, и когда я пытаюсь снова открыть свернутую панель инструментов на 4.2.2, я получаю сбой ниже. Любые идеи?

java.lang.IllegalArgumentException: width and height must be > 0
        at android.graphics.Bitmap.createBitmap(Bitmap.java:638)
        at android.graphics.Bitmap.createBitmap(Bitmap.java:620)
        at android.support.design.widget.CollapsingTextHelper.ensureExpandedTexture(CollapsingTextHelper.java:405)
        at android.support.design.widget.CollapsingTextHelper.setInterpolatedTextSize(CollapsingTextHelper.java:382)
        at android.support.design.widget.CollapsingTextHelper.calculateOffsets(CollapsingTextHelper.java:227)
        at android.support.design.widget.CollapsingTextHelper.setExpansionFraction(CollapsingTextHelper.java:203)
        at android.support.design.widget.CollapsingToolbarLayout$OffsetUpdateListener.onOffsetChanged(CollapsingToolbarLayout.java:754)
        at android.support.design.widget.AppBarLayout$Behavior.dispatchOffsetUpdates(AppBarLayout.java:851)
        at android.support.design.widget.AppBarLayout$Behavior.setAppBarTopBottomOffset(AppBarLayout.java:834)
        at android.support.design.widget.AppBarLayout$Behavior.scroll(AppBarLayout.java:793)
        at android.support.design.widget.AppBarLayout$Behavior.onNestedScroll(AppBarLayout.java:644)
        at android.support.design.widget.AppBarLayout$Behavior.onNestedScroll(AppBarLayout.java:583)
        at android.support.design.widget.CoordinatorLayout.onNestedScroll(CoordinatorLayout.java:1428)
        at android.support.v4.view.ViewParentCompat$ViewParentCompatStubImpl.onNestedScroll(ViewParentCompat.java:97)
        at android.support.v4.view.ViewParentCompat.onNestedScroll(ViewParentCompat.java:330)
        at android.support.v4.view.NestedScrollingChildHelper.dispatchNestedScroll(NestedScrollingChildHelper.java:162)
        at android.support.v7.widget.RecyclerView.dispatchNestedScroll(RecyclerView.java:8306)
        at android.support.v7.widget.RecyclerView.scrollByInternal(RecyclerView.java:1387)
        at android.support.v7.widget.RecyclerView.onTouchEvent(RecyclerView.java:2209)
        at android.view.View.dispatchTouchEvent(View.java:7127)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2170)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1905)

Обновлять:

Похоже, что метод в библиотеке, который вызывает сбой, только проверяет, больше ли высота или ширина 0, но растровое изображение требует, чтобы оба были> 0:

private void ensureExpandedTexture() {
    if(this.mExpandedTitleTexture == null && !this.mExpandedBounds.isEmpty() && !TextUtils.isEmpty(this.mTextToDraw)) {
        this.mTextPaint.setTextSize(this.mExpandedTextSize);
        this.mTextPaint.setColor(this.mExpandedTextColor);
        int w = Math.round(this.mTextPaint.measureText(this.mTextToDraw, 0, this.mTextToDraw.length()));
        int h = Math.round(this.mTextPaint.descent() - this.mTextPaint.ascent());
        this.mTextWidth = (float)w;
        if(w > 0 || h > 0) {
            this.mExpandedTitleTexture = Bitmap.createBitmap(w, h, Config.ARGB_8888);
            Canvas c = new Canvas(this.mExpandedTitleTexture);
            c.drawText(this.mTextToDraw, 0, this.mTextToDraw.length(), 0.0F, (float)h - this.mTextPaint.descent(), this.mTextPaint);
            if(this.mTexturePaint == null) {
                this.mTexturePaint = new Paint();
                this.mTexturePaint.setAntiAlias(true);
                this.mTexturePaint.setFilterBitmap(true);
            }

        }
    }
}

Вот xml:

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

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

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

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:layout_collapseMode="parallax"
            >
            <ImageView
                android:id="@+id/image_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="centerCrop"
                />
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:background="?attr/colorPrimary"
                android:paddingLeft="20dp"
                android:paddingTop="10dp"
                android:paddingRight="10dp"
                android:layout_gravity="bottom"
                >
                <TextView
                    android:id="@+id/seriesDetailTitle"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="American Pickers"
                    android:textColor="@android:color/white"
                    android:textSize="20sp"/>
                <TextView
                    android:id="@+id/seriesDetailTunein"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Tune in tuesdays at 8pm"
                    android:textColor="@android:color/white"
                    android:textSize="18sp"/>
                <LinearLayout
                    android:id="@+id/adFrame"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal"
                    android:paddingRight="@dimen/padding_small"
                    android:visibility="gone">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:layout_marginRight="@dimen/margin_minimal"
                        android:text="@string/show_detail_presented_by"
                        android:textAppearance="@android:style/TextAppearance.DeviceDefault.Small"
                        android:textColor="@android:color/white"
                        android:textSize="10sp"
                        android:visibility="visible"/>

                    <FrameLayout
                        android:id="@+id/adView"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:visibility="visible"/>
                </LinearLayout>
            </LinearLayout>
        </FrameLayout>
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:layout_collapseMode="pin"
            />
    </android.support.design.widget.CollapsingToolbarLayout>

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


<android.support.v4.view.ViewPager
    android:id="@+id/show_view_pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    android:paddingTop="@dimen/toolbar_height"
    />
<RelativeLayout android:id="@+id/controls"
                android:layout_width="match_parent"
                android:layout_height="@dimen/toolbar_height"
                android:background="@color/app_primary"
                app:layout_collapseMode="pin"
                android:layout_gravity="bottom"
                app:layout_anchor="@id/show_view_pager"
                app:layout_anchorGravity="top"
    >

    <Spinner
        android:id="@+id/season_spinner"
        android:layout_width="124dp"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="@dimen/series_detail_spinner_left_margin"
        android:prompt="@string/seasons"
        android:spinnerMode="dropdown"
        android:dropDownVerticalOffset="-48dp"
        android:dropDownWidth="124dp"
        android:background="@drawable/selector_spinner_selector_list"
        />

    <android.support.design.widget.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:clipToPadding="false"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:tabMode="scrollable" />

</RelativeLayout>

I filed a bug: Crash in Design support library - CollapsingTextHelper class -- but if anyone has a fix in the meantime I'd be very grateful!


person bkurzius    schedule 01.07.2015    source источник
comment
Покажи нам свой xml, IllegalArgumentException: width and height must be > 0   -  person Jared Burrows    schedule 02.07.2015
comment
Какого черта вы, люди, хотите закрыть хорошо проработанный вопрос?   -  person Nikola Despotoski    schedule 02.07.2015
comment
Я думаю, что он сделал это до того, как я добавил больше деталей - моя собственная ошибка :-)   -  person bkurzius    schedule 02.07.2015


Ответы (1)


Я обнаружил причину. В xml для CollapsingToolbarLayout я установил:

app:expandedTitleTextAppearance="@style/TransparentText"

И стиль был такой:

<style name="TransparentText">
    <item name="android:textColor">#00666666</item>
</style>

Так что он будет показывать текст только тогда, когда панель инструментов свернута.

Оказывается, стили для ExpandTitleTextAppearance и crushdTitleTextAppearance должны специально наследоваться от TextAppearance. Итак, этот стиль работает правильно:

<style name="TransparentText" parent="@android:style/TextAppearance">
    <item name="android:textColor">#00666666</item>
</style>

Просто предостережение для тех, кто совершит ту же ошибку...

Обновление (20.07.2015): эта ошибка исправлена ​​в версии 22.2.1 библиотеки поддержки дизайна (https://code.google.com/p/android/issues/detail?id=).178674)

person bkurzius    schedule 02.07.2015
comment
Я использую v22.2.1 и все еще имею эту проблему. Ваше решение работает, спасибо - person andrew; 10.08.2015
comment
Ваше решение работает!! Но это не было исправлено в v22.2.1 ИЛИ это было исправлено, но не работает на устройстве Jellybean, но отлично работает на Kitkat и выше. Поскольку у меня происходит сбой на устройстве JB. - person sud007; 30.06.2016