私は新しい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");
編集:
ツールバーを折りたたむと、ここに一連の画像が表示されます。タイトルテキストがどのように読めないかを確認できます。問題は、表示する画像を制御できないことです。そのため、一部の画像では問題ないように見えますが、この例のように、他の画像ではまったく見栄えが悪く、判読できません。私が念頭に置いていたのは、テキストに何らかの背景を追加することだったので、テキストの後ろに常に同じ色があり、常に読みやすいです。
テキスト保護スクリム (少しスクロールダウン)を使用します。私の例では、タイトルテキストが白色であると想定しているため、ケースに合わせて最適化するには調整が必要になる場合があります。
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の高さを使用しました。
Amagi82の例のテキスト保護スクリムを使用して、CollapsingToolbarLayout
にapp: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>
編集:
「縮小」されたツールバーの色を変更する場合は、折りたたみツールバーレイアウトのcontentScrim
属性をその色に設定する必要があります。
<Android.support.design.widget.CollapsingToolbarLayout
app:contentScrim="@color/[color you want]"
...>
私が理解しているように、この属性の値をツールバーに変えたい色に向けることで問題が解決します。
それがあなたの質問に答えることを願っています!
これは、ここまで多くのコードを書くことで達成できる多くの作業です。私は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タイトルが完全に展開されている場合:
b)CollapsingToolbarLayoutタイトルが上にスクロールすると縮小する場合:
2回答 上記
方法は、Joao Ferreiraによってすでに言及されています。
ShadowRadius = 16の場合、次のようになります。Shadowに注意してください
PSは更新するか、混乱があればもっと質問してください:)