转自: https://www.jianshu.com/p/c1d17a39bc09

一、elevation

我们知道,在RelativeLayout里面,或者更加纯净的FrameLayout里面,后写的View会覆盖之前写的View上面。

比如:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <RelativeLayout android:layout_width="match_parent" android:layout_height="300dp" android:background="#ff0000" > <View android:id="@+id/vGeeen" android:layout_width="200dp" android:layout_height="200dp" android:background="#00ff00"/> <TextView android:id="@+id/vBlue" android:layout_width="100dp" android:layout_height="100dp" android:background="#0000ff"/> </RelativeLayout> </RelativeLayout> 

效果

image.png

嗯,这很正常,vBlue现在vGeeen之上,一切很正常。
这时候,主角elevation登场。

我们稍加改动,给vBlue加上一行代码:android:elevation="1dp"
即现在代码变成:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <RelativeLayout android:layout_width="match_parent" android:layout_height="300dp" android:background="#ff0000" > <View android:id="@+id/vGeeen" android:layout_width="200dp" android:layout_height="200dp" android:elevation="1dp" android:background="#00ff00"/> <TextView android:id="@+id/vBlue" android:layout_width="100dp" android:layout_height="100dp" android:background="#0000ff"/> </RelativeLayout> </RelativeLayout> 

在看看现在的效果:

image.png

我的mBlue哪去啦,说好的最后出场的都是主角呢,mBlue居然不见啦!

我们知道,在css里面,我们经常会计算权重,在刚刚的实践里面,加了mGreen加了android:elevation="1dp",相当于在这些View里面他的权重提高了,升官啦!

在android的世界里面,elevation起到了权重的作用,而且,每一个View的默认权重都是0dp,但在Google说他是一个阴影的作用,但是实际上由于MD设计的高度Z造成的,后面我会说到

如果我们把上面的mGreen的把elevation设置为android:elevation="0dp",那么一切照旧,最后出场的mBlue依然会覆盖着mGreen。

原来,这个elevation是2014 年,Google 推出了Material Design新的 Android 支持库 v7之后才有的产物(但是过了这么久我都没用过elevation属性,惭愧)

那为什么elevation可以起到类似权重的作用呢?
因为,在MD设计里面,视图可以投射阴影, elevation 值决定了阴影的大小和顺序。要设定 elevation 值

我们来新建一个布局,给TextView设置android:elevation="30dp",看看会产生什么效果

image.png

设置

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:layout_width="100dp" android:layout_height="100dp" android:background="#000000" android:layout_centerInParent="true" android:elevation="30dp" /> </RelativeLayout> 

通过上图已经很说明了情况。

二、Material Design 之高度视图高度 Z

在Material Design主题当中给UI元素引入了高度的概念,视图的高度由属性Z来表示,决定了阴影的视觉效果,Z越大,阴影就越大且越柔和。但是Z值并不会影响视图的大小。

视图的Z值由两个分量表示:

  • 1、Elevation:静态的分量
  • 2、Translation:用于动画的动态的分量

Z值的计算公式为:
Z=elevation+translationZ

elevation属性和translationZ是好朋友。

具体我们就不在这里细说了,具体了解可以查阅Material Design中的Elevation和shadows,写的挺好的。

三、缘从何时起

那么,这个elevation属性我是如何发现的。
一切都要从CardView说起。

我们经常会在CardView里面设置类似app:cardElevation="5dp"之类的代码。
然后就是我发现处于CardView底部一个View死活不出来,app:cardElevation就是
CardView独有的elevation,当然了,CardView也是可以设置elevation的。

小结一下:

MD设计中,视图有高度的概念,用Z来表示,Z受到Elevation和Translation两个量控制,因为这个高度的概念,导致了elevation属性产生了类似css中的权重的作用。

转载于:https://www.cnblogs.com/wlwqnj/p/8875912.html

写了那么多Android布局,你知道elevation属性吗相关推荐

  1. 请写出3个Android布局,一起撸一波干货集中营练练手Android(三)布局+实现篇

    MPGankIO 布局篇 整个App到了这里就开始准备开始实现逻辑啦,有没有点小期待 后续如果有需要可以爬一波包包通缉令的数据O(∩_∩)O~~ 我们的布局采用5.0之后的新布局控件 1.CardVi ...

  2. android布局属性,Android 布局学习之——LinearLayout属性baselineAligned的作用及baseline...

    相信大家对LinearLayout已经相当熟悉,但你们是否了解它的属性baselineAligned呢? Android官方文档是这么描述的: 那到底这个属性是做什么用的呢? baselineAlig ...

  3. 关于android布局的两个属性dither和tileMode,background 平铺

    http://blog.csdn.net/yuxiaohui78/article/details/8196043 转载于:https://www.cnblogs.com/leihupqrst/p/37 ...

  4. 在android布局中使用include和merge标签

    在我们开发Android布局时,经常会有很多的布局是相同的,这个时候我们可以通过<include/>和<merge/>标签实现将复杂的布局包含在需要的布局中,减少重复代码的编写 ...

  5. android布局的作用,Android UI布局经验总结

    如何在Android中动态设置颜色透明?10%20%到100% Android布局分析工具HierarchyView Android使用include/merge/ViewStub优化布局 List的 ...

  6. android 布局适配虚拟键适配

    今天,看到关于虚拟键盘的内容,于是记录一下. 如果是控件,可以直接使用Android:fitsSystemWindows="true"),但是如果是popwindow,那就必须获取 ...

  7. 【Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性

    在进行UI布局的时候,可能常常会用到 android:gravity  和 android:layout_Gravity 这两个属性. 关于这两个属性的差别,网上已经有许多人进行了说明,这边再简单说一 ...

  8. Android布局加载慢,Android布局优化(四)X2C — 提升布局加载速度200%

    系列文章 前言 在Android布局优化(一)从布局加载原理说起中我们说到了布局加载的两大性能瓶颈,通过IO操作将XML加载到内存中并进行解析和通过反射创建View.这里介绍一种避免运行时通过IO操作 ...

  9. Android学习(七)—— Android布局

    Android布局 1.LinearLayout 线性布局,这种布局在平时的开发中用的最多,内部控件只能水平或竖直进行排列,在搭建较复杂的界面时会有点麻烦. 常用属性 android:orientat ...

最新文章

  1. 【转】图形学基础之透视校正插值
  2. jstack命令案例分析:对wait的线程没有调用notify()导致程序无法停止
  3. flink面试题(需要逐个突破)
  4. ngrx中的memoized函数
  5. SQLite内置表SQLITE_MASTER
  6. TextSnake文本检测
  7. MSDN Library Visual Studio6.0 简体中文版下载及安装
  8. 安:[摩斯密码表]摩斯密码对照表
  9. HTML+CSS实现静态小米商城首页(附完整代码)
  10. Python+Django开发游戏充值管理后台
  11. MongoDB凭什么跻身数据库排行前五?
  12. NoteExpress基础使用
  13. android 通知栏图标变白色方格
  14. matlab随机样本的选择,matlab随机抽样 | 学步园
  15. 面经1.小米前端实习
  16. ACM入门及STL简介
  17. BZOJ 2709 Violet 1 迷宫花园
  18. Fatal error: Uncaught Error: Call to undefined function mysqli_content() in D:\phpstudy_pro\WWW\user
  19. 主成分分析法PCA(一):算法原理
  20. 网页版google语音识别

热门文章

  1. CodeForces 985 E Pencils and Boxes
  2. Proteus中模拟CD40110操作及555组合成计数器
  3. 今天都到了2018年9月19日了
  4. 【初等概率论】 04
  5. 电子样本管理系统v1 v1.1.3
  6. matlab 两幅图求并集,MATLAB交并集运算
  7. 计算机科学经典著作(留作纪念)
  8. 普氏分析 matlab,降维和特征提取 - MATLAB Simulink - MathWorks 中国
  9. CC2640之看门狗
  10. SVN的学习(SVN的简单说明、SVN的安装与配置、SVN与GIT的区别)