2

我正在关注谷歌的优秀博客文章为我的应用程序制作一个黑暗的主题,但我没有看到任何关于如何在我的视图(按钮、应用程序栏等)上获得高程效果的参考。例如,当我将我的应用程序主题设置为 <style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar"> 并制作一个按钮或卡片时:

        <Button
        android:id="@+id/keypadOne"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@color/surface"
        android:elevation="01dp"
        android:text="@string/one"
        android:textColor="@color/onSurface"
        android:textSize="36sp" />

我希望看到使对象看起来更亮的效果,因为在深色主题中使用了半透明的白色覆盖层来暗示海拔或比背景更接近光源。相反,我的按钮、操作栏等与背景颜色相同,因此不可见。

我的问题是:

  1. 我必须手动实现这个高程功能还是由材料库提供?
  2. 如果我让它在 Android 10+ 上自动运行,我是否必须实施手动解决方案以在版本 9 及更早版本上实现向后兼容性?
4

2 回答 2

3

我找到了解决方案。为了在 CardViews 的高度上实现叠加着色效果,您必须使用包含此功能的 Material 库的特殊对象:MaterialCardView。使用此 CardView 后,将其 app:cardElevation属性设置为更改我在上面链接的关于暗模式的谷歌博客文章中提到的白色叠加层。

例如,我的 CardView 现在看起来像这样:

    <com.google.android.material.card.MaterialCardView 
android:id="@+id/testCard" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:elevation="18dp" app:cardCornerRadius="4dp" />

请注意,此特殊高度属性仅适用于 MaterialCardViews,尽管其他视图(如 Toolbars)具有 Material 版本。

于 2020-04-02T15:13:32.827 回答
2

首先确保您使用DayNight这样的材料组件库主题和变体

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">

这应该会自动更改表面颜色AppBarLayout,但是如果您想根据其他视图的高程设置此自动表面颜色更改,请设置您ToolbarMaterialCardView

android:background="?attr/colorSurface"或者在MaterialCardView使用这个的情况下app:cardBackgroundColor="?attr/colorSurface"并应用海拔

android:elevation="4dp"或者在某些情况下没有 android 命名空间elevation="4dp"或者在MaterialCardView使用这个的情况下app:cardElevation="4dp"

于 2020-04-21T07:47:07.510 回答