web-dev-qa-db-ja.com

Android CollapsingToolbarLayoutタイトルの背景

私は新しいAndroid Design Support LibraryのCollapsingToolbarLayoutを使用しています。

タイトルを設定しましたが、問題なく動作していますが、スクロールすると、背景の画像に応じてテキストが失われます。

私がやりたいことは、CollapsingToolbarLayoutタイトルの背景を設定することですが、それを行う方法が見つかりません。

とにかくこれを達成する方法はありますか?

ありがとう!

レイアウト:

<Android.support.design.widget.CoordinatorLayout
Android:id="@+id/main_content"
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.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/ivBigImage"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:fitsSystemWindows="true"
            Android:scaleType="centerCrop"
            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>

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

<Android.support.v4.widget.NestedScrollView
    Android:layout_width="match_parent"
    Android:layout_gravity="fill_vertical"
    Android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:orientation="vertical"
        Android:paddingTop="24dp">

        <Android.support.v7.widget.CardView
            Android:id="@+id/cvDescription"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_margin="10dp">

            <LinearLayout
                style="@style/Image.Info.CardContent"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content">

                <TextView
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content"
                    Android:text="@string/description"
                    Android:textAppearance="@style/TextAppearance.AppCompat.Title"/>

                <TextView
                    Android:id="@+id/tvDescription"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content"
                    Android:text=""/>

            </LinearLayout>

        </Android.support.v7.widget.CardView>


    </LinearLayout>

</Android.support.v4.widget.NestedScrollView>

アクティビティでCollapsingToolbarLayoutタイトルを設定します。

CollapsingToolbarLayout collapsingToolbar =
            (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
    collapsingToolbar.setTitle("Some title here");

編集:

ツールバーを折りたたむと、ここに一連の画像が表示されます。タイトルテキストがどのように読めないかを確認できます。問題は、表示する画像を制御できないことです。そのため、一部の画像では問題ないように見えますが、この例のように、他の画像ではまったく見栄えが悪く、判読できません。私が念頭に置いていたのは、テキストに何らかの背景を追加することだったので、テキストの後ろに常に同じ色があり、常に読みやすいです。

enter image description here

45
roy_lennon

テキスト保護スクリム (少しスクロールダウン)を使用します。私の例では、タイトルテキストが白色であると想定しているため、ケースに合わせて最適化するには調整が必要になる場合があります。

CollapsingToolbarLayout内で、ivBigImageの後に以下を追加します。

<View
    Android:layout_width="match_parent"
    Android:layout_height="@dimen/sheet_text_scrim_height_top"
    Android:background="@drawable/scrim_top"
    app:layout_collapseMode="pin"/>

<View
    Android:layout_width="match_parent"
    Android:layout_height="@dimen/sheet_text_scrim_height_bottom"
    Android:layout_gravity="bottom"
    Android:layout_alignBottom="@+id/image"
    Android:background="@drawable/scrim_bottom"/>

Drawableフォルダーに以下を追加します。

scrim_top.xml

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<gradient
    Android:angle="270"
    Android:startColor="@color/translucent_scrim_top"
    Android:centerColor="@color/translucent_scrim_top_center"
    Android:endColor="@Android:color/transparent"/>
</shape>

およびscrim_bottom.xml

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<gradient
    Android:angle="90"
    Android:startColor="@color/translucent_scrim_bottom"
    Android:centerColor="@color/translucent_scrim_bottom_center"
    Android:endColor="@Android:color/transparent"/>
</shape>

色については、最初のテストでこれらをより暗くして、動作していることがより明確になるようにする必要がありますが、本番では以下を使用しました:

<color name="translucent_scrim_top">#26000000</color>
<color name="translucent_scrim_top_center">#0C000000</color>
<color name="translucent_scrim_bottom">#2A000000</color>
<color name="translucent_scrim_bottom_center">#0D000000</color>

寸法については、88dpの高さを使用しました。

75
Amagi82

Amagi82の例のテキスト保護スクリムを使用して、CollapsingToolbarLayoutapp:expandedTitleTextAppearanceパラメータ。

<Android.support.design.widget.CollapsingToolbarLayout
    Android:id="@+id/collapsing_toolbar"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    .
    app:expandedTitleTextAppearance="@style/TextAppearance.Design.CollapsingToolbar.Expanded.Shadow"
    .
    .
    app:layout_scrollFlags="scroll|exitUntilCollapsed">

たとえば、スタイルxmlにこれを追加します。

<style name="TextAppearance.Design.CollapsingToolbar.Expanded.Shadow">
    <item name="Android:shadowDy">0</item>
    <item name="Android:shadowDx">0</item>
    <item name="Android:shadowRadius">8</item>
    <item name="Android:shadowColor">@Android:color/black</item>
</style>
19
Joao Ferreira

編集:

「縮小」されたツールバーの色を変更する場合は、折りたたみツールバーレイアウトのcontentScrim属性をその色に設定する必要があります。

<Android.support.design.widget.CollapsingToolbarLayout
        app:contentScrim="@color/[color you want]"
        ...>

私が理解しているように、この属性の値をツールバーに変えたい色に向けることで問題が解決します。

それがあなたの質問に答えることを願っています!

4
Shubhang Desai

これは、ここまで多くのコードを書くことで達成できる多くの作業です。私は2つの方法でそれを達成しました。

1 TransparentBlackカラーのビューを使用した簡単な回避策
CODE >>

コードの説明:
1 CollapsingToolbarLayoutには、テキストサイズのみのスタイルがあります。
2デフォルトのCollapsingToolbarLayoutマージン下部は16dpにオーバーライドされます。
3。視差collapseModeを持つヘッダーは、ImaveViewとViewを持つRelativeLayoutです。
4。上部ヘッダーの下部にBGを持つこの単純なビュー(コントラストの色(ここでは#77000000)の相対レイアウト)は、CollapsingToolbarLayoutの折りたたまれた白色のタイトルのBGとして機能します。

  <Android.support.design.widget.CollapsingToolbarLayout
        Android:id="@+id/redeem_detail_collapsing_toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:background="@color/color_window_background"
        Android:fitsSystemWindows="true"
        app:expandedTitleMarginBottom="16dp"
        app:expandedTitleTextAppearance="@style/CollapsingTitleStyle"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

        <!--header view-->
        <RelativeLayout
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            app:layout_collapseMode="parallax">

            <ImageView
                Android:id="@+id/redeem_detail_top_bg"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:fitsSystemWindows="true"
                Android:scaleType="centerCrop"
                Android:src="@drawable/splash" />

            <!--A view that draws a semi tranparent black overlay so that title is visible once expanded -->
            <View
                Android:layout_width="match_parent"
                Android:layout_height="48dp"
                Android:layout_alignParentBottom="true"
                Android:background="@color/black_transparent" />

        </RelativeLayout>

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

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

スタイル1の画像:

a)CollapsingToolbarLayoutタイトルが完全に展開されている場合:

Expanded Title

b)CollapsingToolbarLayoutタイトルが上にスクロールすると縮小する場合:

Shrinking up

2回答 上記

方法は、Joao Ferreiraによってすでに言及されています。

ShadowRadius = 16の場合、次のようになります。Shadowに注意してください

enter image description here

PSは更新するか、混乱があればもっと質問してください:)

3
sud007