面试官问你关于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 问到你缺点的时候...
职业规划?当大家都在说职业规划的时候是在说什么?职业规划,我个人的理解是根据当下自己的兴趣、能力、环境、...多维度为你解析问题回答核心,并教你如何快速上手!小白速进!希望能对你有所启发和帮助!祝你成功!
面试是求职过程中至关重要的环节,面试官提出的问题旨在评估求职者的技能、性格、经验和适应能力。以下是一些面试中常见的问题及其背后所蕴含的知识点: 1. **为什么我们要雇请你?** 这个问题是考察你的自信和自我...
这样的回答既显得专业,又能有效地传达你的职业愿景,增强面试官对你的认可。 记住,职业规划不仅仅是为了面试成功,更重要的是为你的长远职业生涯铺路。通过制定实际可行的规划,你不仅可以更好地了解自己的职业...
例如,在给出的情境对话中,面试官问候选人关于其参与的某项活动或项目,试图了解候选人在团队中扮演的角色,以及其对完成任务的具体贡献。 面试官在专业性方面会用STAR法则来衡量候选人。STAR法则包括:情境...
Android面试宝典包含两个宝典: 1【黑马项目宝典】虐面试官神器之必备黑马程序员项目宝典V1.1 内容包括:(1)电子商城(2)ListView系列(3)图像处理(4)动画效果(5)控件大全(6)新闻资讯(7)生活相关(8)...
图文并茂吃透面试题,看完这个,吊打面试官,拿高薪offer!
面试官常用的面试话术解析 面试是薪酬协商的开始,面试官的面试话术是对应聘者的考验和考察。以下是面试官常用的面试话术,了解这些话术可以帮助应聘者更好地准备面试,提高面试的通过率。 1. 请你做一分钟自我...
如果面试官问你在项目中遇到什么难解决的问题?你是如何解决的?咱们这个旅游项目应该如何回答啊
虽然求职者难以直接了解面试官的雇佣压力,但通过观察面试官的行为和态度,求职者可能会察觉到一些线索,比如面试官可能更积极地引导应聘者回答问题,或是在面试过程中显得比较急切。 最后,面试官的心理特征还包括...
面试官:RabbitMQ本身不支持延迟队列,那你给我实现一个?.zip面试官:RabbitMQ本身不支持延迟队列,那你给我实现一个?.zip面试官:RabbitMQ本身不支持延迟队列,那你给我实现一个?.zip面试官:RabbitMQ本身不支持...
沟通和团队协作在工作中至关重要,因此面试官常会问及这方面的问题,例如:“描述一次你和团队成员意见不一致时的情况。”或“你通常如何处理工作中的冲突?”通过这些问题,面试官可以评估应聘者的人际交往能力、...
在准备面试时,开发者需要回顾每个项目的亮点,思考面试官可能问到的技术细节和业务理解,并提前准备相应的回答。例如,描述一个技术难题是如何被解决的,或者一个业务流程是如何被优化的。同时,对于在运行中的项目...
面试官可能早已看穿这些策略,并不会因此对你产生好感。 3. **体现你的投入和重视**: - 提出具体、与你个人利益密切相关的问题,显示出你对职位的认真态度。例如,你可以询问工作内容的具体细节、团队文化、项目...
根据给定文件的信息,我们可以总结出面试官在IT领域经常问到的一些问题及相应的思考方式。下面将对这些常见问题进行详细的分析与解答。 ### 1. 面试官为何要提出这些问题? 面试官提出这些问题主要是为了评估应聘...
大厂资深面试官带你玩转Android高级面试系列课程.txt