【问题标题】:Material Design for pre-lollipop棒棒糖前的材料设计
【发布时间】:2016-03-17 17:48:28
【问题描述】:

我正在从事材料设计工作,但遇到了我无法解决的问题。这是关于阴影/高度的。

  1. 在这里我们可以了解 Material Design 中的阴影和高程

https://developer.android.com/training/material/shadows-clipping.html#Shadows

但我们只能在棒棒糖和更高版本中使用这些功能。 那么棒棒糖前的设备呢?如果我想创建可以在棒棒糖之前的设备上使用的应用程序,那么我不能使用,例如

android:elevation="2dp"

我说的对吗?

  1. 如果是这样,那么我能做的就是使用已经包含阴影的设计可绘制对象。 还有一个我无法理解的问题。

例如,设计师给了我一些设计的psd。想象一下它看起来像这样

如您所见,面板的上边距为 448 像素。我们可以使用 Photoshop 轻松获得此边距值。

但是当我用它的阴影提取这个面板时,我发现阴影本身在面板顶部占据了 10 像素

448px 的上边距不算阴影。

显然,我不能只将 panel.png 放在我的 some_layout.xml 上并将边距顶部设置为 448px(298.67dp),因为此可绘制对象包含阴影。看来我应该考虑阴影长度,我应该从上边距中减去这个长度(448-10=438px=292dp)。

这个推理正确吗?我简直不敢相信。这种方式似乎太复杂了。也许存在更有效的做法?

【问题讨论】:

标签: android material-design elevation


【解决方案1】:

根据 Pre Lollipop 设备中的shadow

对于 Android 5.0 及更高版本:AppBarLayout 自动提供/给予 布局中的阴影。还可以增加高度 AppBarLayout by android:elevation="4dp"

对于 Pre-Lollipop :您可以使用以下链接: http://blog.grafixartist.com/add-a-toolbar-elevation-on-pre-lollipop/

注意:工具栏也支持提升到它,使用 android:elevation="4dp"

阅读更多:Add elevation/shadow on toolbar for pre-lollipop devices

根据 Pre Lollipop 设备中的elevation

你不能用官方的方法来模仿棒棒糖之前的海拔。

您可以使用一些可绘制对象在组件中制作阴影。 例如,Google 在 CardView 中使用了这种方式。

ViewCompat.setElevation(View, int) 当前创建阴影 仅在 API21+ 上。如果你检查后面的代码,这个方法会调用:

API 21+:

  @Override
    public void setElevation(View view, float elevation) {
        ViewCompatLollipop.setElevation(view, elevation);
    }

API

@Override
public void setElevation(View view, float elevation) {

}

阅读更多:How to implement the Material-design Elevation for Pre-lollipop

编辑:正如@geek90 所建议的,也请访问这个repo:http://github.com/navasmdc/MaterialDesignLibrary

【讨论】:

  • 非常感谢您提供的有用链接!我肯定会在我的工作中使用它们。但是我还有一点不明白。想象一下,如上例所示,我有一些设计元素,我需要将其正确放置在屏幕上。正如我从您的链接中了解到的那样,所有这些技术都意味着使用包含阴影的可绘制对象。例如,像这样 android:background="@android:drawable/dialog_holo_light_frame" 考虑到drawable包含阴影,哪种方法可以正确确定这个元素在我的布局中的正确位置?
  • 好吧,如果您真的想将任何视图与其目的地粘合,请努力学习RelativeLayout 及其属性。这是为布局元素设置特定位置的最佳布局。在 xml 文件中,我认为在哪个查询中放置属性并不重要——它只取决于你,我的意思是让它尽可能可读,以防以后找到要更改的属性
  • 谢谢,但我几乎总是在我的项目中使用 RelativeLayout。对我来说很清楚,例如,我可以设置这样的东西 问题是,如果我设置drawable阴影 - 它出现的位置不正确,它与给定的 psd 布局不匹配。阴影将元素向下移动,低于它必须的位置。我是否应该每次都考虑阴影长度并重新计算 layout_marginTop 属性?这不可能是真的,太复杂了。
  • 好吧,如果你想将布局作为你的 .psd 文件,你需要计算很多东西 :-) 有填充、边距、阴影......最后是屏幕设备。尝试在具有不同屏幕尺寸和密度的模拟器或设备上打开您的应用程序。是的,有时候真的很痛苦。这就是如今 Google 的原因:让您的应用程序尽可能简单。我们有材料设计,不要创建你自己的等等......
  • 是的,你说得对。但在 Material Design 之前,它更加清晰。那些阴影正在杀死我......
【解决方案2】:

这也让我很沮丧。我不喜欢用渐变制作阴影。我深入研究了文档,发现了 Lollipop 的实现是如何完成的,并为旧设备从头开始编写代码。

我的实现称为 Carbon。这是一个支持动态、自动阴影的 Material Design 实现。无需添加任何类型的边距或渐变 - 只需指定视图的高度并在所有 SDK 上获取阴影。

https://github.com/ZieIony/Carbon

在此处阅读有关该方法的更多信息:How to implement the Material-design Elevation for Pre-lollipop

【讨论】:

  • 哇!我没有深入到这个图书馆,但乍一看它确实令人印象深刻。非常感谢,齐洛尼!我会尽快尝试。
猜你喜欢
  • 2015-12-07
  • 2015-02-07
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 2015-06-22
  • 1970-01-01
  • 1970-01-01
  • 2016-01-14
相关资源
最近更新 更多