面试官问你关于Android布局不知道回答怎么办?今天给大家整理总结出了关于Android布局方面的知识点,希望看完这篇文章的伙伴们下次再碰到这样的问题能够自信回答面试官!
文末我放了我整理的关于这方面的学习视频和知识总结PDF,有需要的伙伴可以简信我获取。
Android常见的5个布局,我想大家一定不会陌生。LinearLayout、RelativeLayout和FrameLayout也是使用频率较高的布局方式,做Android开发的一定使用过。
传统的5种布局方式:
- LinearLayout
- RelativeLayout
- FrameLayout
- GridLayout
- TableLayout
不过我的问题并不是问面试者如何使用这些基础的布局,而是要看面试者怎么解决布局嵌套(影响性能)和屏幕适配问题。
面试官:你是如何解决Android的布局嵌套问题的?
我们都清楚Android界面的布局太复杂,嵌套层次过深,会使整个界面的测量、布局和绘制变得更复杂,对性能会造成影响。所以我们在写Layout文件时,也要尽量避免布局的嵌套层次过深的问题。
在怎么解决问题之前,我们得有一个好方法先判断当前的问题情况。Android SDK工具箱中有一个叫做Hierarchy Viewer的工具,能够在App运行时分析Layout。
注意:在ROOT的手机,或者是安装开发版的ROM的手机可以直接使用Hierarchy Viewer。
如果没有Root的手机(SDK 4.1及以上),需要在你的PC端添加一个环境变量“ANDROID_HVPROTO=ddm”。
Mac系统的配置如下:
保存后运行:source ~/.bash_profile
最后可以DDMS的Hierarchy Viewer看到:
下面列举一些面试者常使用的方式。
merge:
merge标签的作用是合并UI布局,使用该标签能降低UI布局的嵌套层次。
merge标签可用于两种情况:
- 布局顶结点是FrameLayout且不需要设置background或padding等属性,可以用merge代替,因为Activity内容试图的parent view就是个FrameLayout,所以可以用merge消除只剩一个。
- 某布局作为子布局被其他布局include时,使用merge当作该布局的顶节点,这样在被引入时顶结点会自动被忽略,而将其子节点全部合并到主布局中。
ViewStub:
ViewStub标签引入的布局默认不会inflate,既不会显示也不会占用位置。 ViewStub常用来引入那些默认不会显示,只在特殊情况下显示的布局,如数据加载进度布局、出错提示布局等。
需要在使用时手动inflate:
ViewStub stub = (ViewStub)findViewById(R.id.error_layout);
errorView = stub.inflate();
errorView.setVisibility(View.VISIBLE);
ViewStub在一定的程度可以起到减少嵌套层次的作用,特别是很多时候我们的程序可能不需要走到ViewStub的界面。
include:
将可复用的组件抽取出来并通过include标签使用,但<include>标签能减少布局的层次吗?
我认为不能。include主要解决的是相同布局的复用问题,它并不能减少布局的层次。
用RelativeLayout代替LinearLayout
很多人为了减少布局层次喜欢用RelativeLayout代替LinearLayout,不过可能达到的效果并不会很明显。层次是减少了,但本身RelativeLayout就会比LinearLayout性能差一点。
有一些界面,比如一个图片和一个文本的布局(ListItem常见的布局方式),可以利用TextView有drawableLeft, drawableRight等属性,完全不需要RelativeLayout或者LinearLayout布局。
你不知道的两种新的布局方式
传统的布局方式存在一定的缺陷,如RelativeLayout要两次测量(measure)它的子View才能知道确切的高度;如果LinearLayout布局的子View有设置了layout_weight,那么它也需要测量两次才能获得布局的高度。
相对于传统的布局方式,Android官方还推出了两种新的布局方式:ConstraintLayout和FlexboxLayout。
ConstraintLayout:
ConstraintLayout即约束布局,在2016年由Google I/O推出。ConstraintLayout和RelativeLayout有点类似,控件之间根据依赖关系而存在,但比RelativeLayout更加灵活。创建大型复杂的布局仍然可以使用扁平的层级(不用嵌套View Group),说的简单些就是,再复杂的界面也可以只有2层层次。
要使用ConstraintLayout需要在build.gradle中添加相关的support库:
compile 'com.android.support.constraint:constraint-layout:1.0.2'
Android Studio 2.3及之后的版本使用引导创建Empty的Activity时,默认就是使用ConstraintLayout布局。关于本面试题的答案,官方其实已经明确给出信号了。
使用ConstraintLayout可以有效的解决布局嵌套过多导致的性能问题,官方也对其渲染性能进行了优化,并且ConstraintLayout支持可视化的方式编写布局。
不过学会熟练使用ConstraintLayout会需要一点时间,但这是值得的。
官方文档:https://developer.android.com/training/constraint-layout/index.html
FlexBoxLayout:
做过前端开发(CSS方面)的同学对FlexBox一定不会陌生,最近我在做微信小程序开发时也涉及到FlexBox。FlexBox(弹性布局)是w3c在2009年提出的一种新的布局方案,解决以前那种传统css的盒模型的局限性。
Google开源了FlexboxLayout布局和前端CSS FlexBox布局具有相同的功能(肯定有不一样的地方),但已经足够在Android上改进布局的构建方式。
FlexBoxLayout可以理解成一种更高级的LinearLayout,不过比LinearLayout更加强大和灵活。如果我们使用LinearLayout布局的话,那么不同的分辨率,也许我们要重新调整布局,势必会需要跟多的布局文件放在不同的资源目录。而使用FlexBoxLayout来布局的话,它可以适应各种界面的改变(所以叫响应式布局)。
看一下官方图片感受一下:
如果对前端的Flexbox不太了解的话,你还需要补一些概念,好在这些东西在网上很容易找到。
小结
可能很多读者会觉这样的面试题是吹毛求疵,很多项目中哪有这么复杂的界面,根本就用不到这些优化措施。
So,你没有成长为厉害的人。
可以说厉害的人,或者叫高手,可能只是比较多在意这些细节而已。在实践中的经历告诉我,很多难于解决的性能问题,并不是因为有一个影响性能的问题无法攻克,而是没有一个明显的制约因素,是有各种小问题一点一点堆积起来,最终积重难返。
所以,把细节做好,或者意识到细节的地方可能引发的问题,对我们解决问题是很有帮助的,不要浪费了让你可以成长的细节。
最后
有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。
对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!
这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司19年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
相信它会给大家带来很多收获:
【高清技术脑图】以及【配套的架构技术PDF】加我wx:X1524478394 即可免费获取
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
- 无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!!!!!!!!
- 我希望每一个努力生活的IT工程师,都会得到自己想要的,因为我们很辛苦,我们应得
相关推荐
在回答之前,需要明确的一点是,你面前坐着的是面试官,必然醉翁之意不在酒,借用这个问题虚晃一枪,意图获取更多关于你的信息。简而言之,你的回答很可能会直接影响面试结果。如果你不想轻易丢掉这份工作,回答这一...
如果你进入到面试的后一阶段,这类问题可以让面试官或企业判断求职者的要求是否符合企业的薪酬标准,并进一步判断求职者对自身价值的认可程度。那么在求职面试时面试官会怎么提问呢?本文采用面试官视角为你解读满分...
面试官问我有没有男朋友,是不是想追我?当然不是!!不过当面试官抛出这个问题的时候,面试者可能会觉得被冒犯了:我的感情问题,跟这个岗位有什么关系呢?要知道每一个面试官,都是是八卦精转世。他们就像你的七...
当面试官问你:“What are your weaknesses?”。即:“你的缺点是什么?”时是一道送命题,对于一般人来说就是一个雷区,一旦没有准备怕是要步步踩雷了。 认识自己的缺点就是一个巨大的优点,当 HR 问到你缺点的时候...
面试官常问的人事问题及回答、 面试官常问的人事问题及回答
职业规划?当大家都在说职业规划的时候是在说什么?职业规划,我个人的理解是根据当下自己的兴趣、能力、环境、...多维度为你解析问题回答核心,并教你如何快速上手!小白速进!希望能对你有所启发和帮助!祝你成功!
程序员面试学习资料
Android面试宝典包含两个宝典: 1【黑马项目宝典】虐面试官神器之必备黑马程序员项目宝典V1.1 内容包括:(1)电子商城(2)ListView系列(3)图像处理(4)动画效果(5)控件大全(6)新闻资讯(7)生活相关(8)...
SSH笔试面试题, 面试官 最有可能问的哦!!!!
最近面试了几家公司,都是java题,然后在面试过程中发现一般面试官会问的技术问题都可以在本文档找得到,一般会问servlet的生命周期、Struts和struts2的区别,hibernate、spring的认识、对象、修饰符的作用域、OOP的...
面试官:RabbitMQ本身不支持延迟队列,那你给我实现一个?.zip面试官:RabbitMQ本身不支持延迟队列,那你给我实现一个?.zip面试官:RabbitMQ本身不支持延迟队列,那你给我实现一个?.zip面试官:RabbitMQ本身不支持...
面试前看看,让你充满自信,不再惧怕面试官各种刁难。1.Java中内存管理及各区域内存储数据的生命周期? 2.JVM堆内存的分代管理以及垃圾回收流程? 3.面向对象三大特征及详细理解? 4.重载与重写的区别? 5.接口和抽象类...
面试70问经典回答 招招有效 针对面试官的问题 作出灵巧的回答 帮助你过面试官
大厂资深面试官带你玩转Android高级面试系列课程.txt
面试官常用的面试话术有哪些?面试技巧2021.doc
面试测试岗位时和看相关面经总结的常问题目,包含经典测试用例,常问代码,相关的计算机网络知识和测试的基础知识!
android面试 android面试 android面试 android面试 android面试 android面试 android面试 android面试 android面试 android面试
当面试官问「你有什么要问我的吗」时,应该问什么?
面试中面试官常问的问题有哪些?.pdf
Java面试宝典-对线面试官.pdf