Android CollapsingToolbarLayout 标题背景
Android CollapsingToolbarLayout Title background
我正在使用来自新 Android 设计支持库的 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>
在 activity 中设置 CollapsingToolbarLayout 标题:
CollapsingToolbarLayout collapsingToolbar =
(CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
collapsingToolbar.setTitle("Some title here");
编辑:
在这里,当我折叠工具栏时,您可以看到一系列图像。您可以看到标题文本是如何不可读的。问题是我无法控制我显示的图像,所以对于某些图像,它看起来不错,但对于其他图像,比如这个例子,它看起来一点也不好,而且不可读。我的想法是也许可以给文本添加某种背景,这样文本后面总是有相同的颜色并且总是可读的。
编辑:
如果工具栏在 "shrunk" 后想要更改颜色,您需要将折叠工具栏布局的 contentScrim
属性设置为该颜色:
<android.support.design.widget.CollapsingToolbarLayout
app:contentScrim="@color/[color you want]"
...>
将此属性的值指向您希望工具栏变成的颜色将解决您的问题,据我所知。
希望这能回答您的问题!
使用 text protection scrim(稍微向下滚动)。我的示例假设标题文本为白色,因此可能需要进行一些调整以针对您的情况进行优化。
在您的 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>
通过编写这么多代码,在这里完成了很多工作。
我通过两种方式实现了这一目标。
1 使用透明黑色视图的简单解决方法
代码>>
代码解释:
1 CollapsingToolbarLayout 有一个只有文字大小的样式。
2 默认的 CollapsingToolbarLayout 边距底部被覆盖为 16dp。
3。我们的 header 视差 collapseMode 是一个带有 ImaveView 和 View 的 RelativeLayout。
4。这个带有 BG 的简单视图位于顶部 header 具有对比色的相对布局(此处为 #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>
Images for style 1:
a) CollapsingToolbarLayout 标题完全展开时:
b) 当 CollapsingToolbarLayout 标题在向上滚动时缩小时:
2回答above
Joao Ferreira 已经提到了方法。
PS请更新或询问更多,如果有任何混淆:)
我正在使用来自新 Android 设计支持库的 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>
在 activity 中设置 CollapsingToolbarLayout 标题:
CollapsingToolbarLayout collapsingToolbar =
(CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
collapsingToolbar.setTitle("Some title here");
编辑:
在这里,当我折叠工具栏时,您可以看到一系列图像。您可以看到标题文本是如何不可读的。问题是我无法控制我显示的图像,所以对于某些图像,它看起来不错,但对于其他图像,比如这个例子,它看起来一点也不好,而且不可读。我的想法是也许可以给文本添加某种背景,这样文本后面总是有相同的颜色并且总是可读的。
编辑:
如果工具栏在 "shrunk" 后想要更改颜色,您需要将折叠工具栏布局的 contentScrim
属性设置为该颜色:
<android.support.design.widget.CollapsingToolbarLayout
app:contentScrim="@color/[color you want]"
...>
将此属性的值指向您希望工具栏变成的颜色将解决您的问题,据我所知。
希望这能回答您的问题!
使用 text protection scrim(稍微向下滚动)。我的示例假设标题文本为白色,因此可能需要进行一些调整以针对您的情况进行优化。
在您的 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>
通过编写这么多代码,在这里完成了很多工作。 我通过两种方式实现了这一目标。
1 使用透明黑色视图的简单解决方法
代码>>
代码解释:
1 CollapsingToolbarLayout 有一个只有文字大小的样式。
2 默认的 CollapsingToolbarLayout 边距底部被覆盖为 16dp。
3。我们的 header 视差 collapseMode 是一个带有 ImaveView 和 View 的 RelativeLayout。
4。这个带有 BG 的简单视图位于顶部 header 具有对比色的相对布局(此处为 #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>
Images for style 1:
a) CollapsingToolbarLayout 标题完全展开时:
b) 当 CollapsingToolbarLayout 标题在向上滚动时缩小时:
2回答above
Joao Ferreira 已经提到了方法。
PS请更新或询问更多,如果有任何混淆:)