web-dev-qa-db-ja.com

CollapsingToolbarがそれほど高くないコンテンツで機能しない

これはバグだと確信しているので、回避策を求めています。私のレイアウトは次のようなものです:

<CoordinatorLayout>

    <AppBarLayout>
        <CollapsingToolbarLayout>
            <ImageView/>
            <Toolbar/>
        </CollapsingToolbarLayout>
    </AppBarLayout>

    <Android.support.v4.widget.NestedScrollView/> <!-- content here -->

</CoordinatorLayout>

Webからコンテンツを取得していますが、その高さがわかりません。数行の場合もあれば、非常に長い場合もあります。ただし、コンテンツが画面全体をカバーするのに十分な大きさでない場合、CollapsingToolbarがうまく機能しないことを発見しました。ケース:

  • content.height > screen.height:動作します;上/下をスワイプすると、ツールバーが展開および折りたたまれ、コンテンツがスクロールされます。

  • content.height < screen.height:しません。それは良くない、ほとんどの場合(content.height + expandedToolbar.height) > screen.height

つまり、コンテンツの高さが十分でない場合content + ExpandedToolbarが画面全体よりもはるかに高い場合、スクロールジェスチャに反応しませんいくつかのバグが表示されます。ツールバーを少し折りたたむには、10回のジェスチャーが必要になる場合があります。そのため、ツールバーが展開されているため、コンテンツの下部が下部に非表示になっている部分にはほとんど到達できません。

回避策はありますか?

試してみたい場合は、 cheesesquare サンプルプロジェクトを取得し、activity_detail.xmlのNestedScrollView内のコンテンツを削除(または削減)してください[API17はこちら]

22
natario

秘訣は、Android:layout_gravity="fill_vertical"NestedScrollViewに追加することです。このようにして、ツールバーは折りたたまれてスムーズに拡張され、サイズに関係なく、空でないNestedScrollViewのスクロールジェスチャに反応します。

もちろん、スクロールビューが空の場合、画面の「コンテンツ」部分をスクロールしてもツールバーは折りたたまれません。しかし、それは私にはそれほど悪くはないようです。

更新

コンテンツの一番下の部分が非表示のままになるため、このソリューションには大きなコンテンツでいくつかの問題があるようです。隠された部分は、折りたたまれたツールバーの高さと同じくらい大きい(大きいように見える)ことがわかりました。これにより、回避策を簡単に定義できます。ScrollViewの下部にマージンを追加するだけで、測定され、下部の非表示部分が解放されます。したがって:

Android:layout_gravity="fill_vertical"
Android:layout_marginBottom="?attr/actionBarSize"

または、ビューでToolbarに指定したサイズ。このソリューションは、小さいコンテンツと大きいコンテンツにうまく適合しますが、小さいコンテンツではスクロールがそれほどスムーズではないことに注意してください。

Update2(2015年7月)

初期のテストから、このバグはサポートデザインライブラリのv22.2.1リリースで修正されているようです。

23
natario