Android 面试题总结之Android 基础(六)
在上一章节Android 面试题总结之Android 基础ListView(五) 主要是ListView的优化,原理以及一些基本问题。
在阅读过程中有任何问题,请及时联系。如需转载请注明 fuchenxuan de Blog
本章系《Android 之美 从0到1 – 高手之路》Android基础将会总结了Android 布局常见面试问题。其实对于基础方面Android 开发来说,经常面试无非就是UI,网络,数据库,这三大方面,本章节总结了笔记经典的问题,希望对广大Android 开发者,有所帮助。
布局面试问题
- Android 中常用的布局都有哪些?
- FrameLayout
- RelativeLayout
- LinearLayout
- AbsoluteLayout
- TableLayout
- GrideLayout(Android 4.0 推出)
谈谈 UI 中, Padding 和 Margin 有什么区别?
android:padding 和 android:layout_margin 的区别,其实概念很简单,padding 是站在父 view 的角度描述问 题,它规定它里面的内容必须与这个父 view 边界的距离。margin 则是站在自己的角度描述问题,规定自己和其他(上下左右)的 view 之间的距离,如果同一级只有一个 view,那么它的效果基本上就和 padding 一样了。
- 使用权重如何让一个控件的宽度为父控件的 1/3?
可以在水平方向的 LinearLayout 中设置 weightSum 为 3,然后让其子控件的 weight 为 1,那么该子控件就是 父控件的 1/3。 - Android 中布局的优化措施都有哪些?
这个问题也属于Android 性能优化的一部分。
1、尽可能减少布局的嵌套层级
可以使用 sdk 提供的hierarchyviewer
工具分析视图树,帮助我们发现没有用到的布局。
2、不用设置不必要的背景,避免过度绘制 比如父控件设置了背景色,子控件完全将父控件给覆盖的情况下,那么父控件就没有必要设置背景。
3、使用<include>
标签复用相同的布局代码
4、使用<merge>
标签减少视图层次结构
该标签主要有两种用法:
1) 因为所有的 Activity 视图的根节点都是 FrameLayout,因此如果我们的自定义的布局也是 FragmenLayout 的时候那么可以使用 merge 替换。
2) 当应用Include
或者ViewStub
标签从外部导入 xml 结构时,可以将被导入的 xml 用 merge 作为根节 点表示,这样当被嵌入父级结构中后可以很好的将它所包含的子集融合到父级结构中,而不会出现冗余的节点。
<merge>
只能作为 xml 布局的根元素。
5、通过<ViewStub>
实现 View 的延迟加载 android:layout_gravity 和 android:gravity 的区别?
第一个是让该布局在其父控件中的布局方式,第二个是该布局布置其字对象的布局方式。关于LinearLayout 的权重算法?
<LinearLayout android:layout_width="210dp" android:layout_height="wrap_content"