2.2 常见面试笔试真题
1)请你比较一下各个布局,然后说一说它们的特性。
思路:像这类要比较各种布局的问题,应该更多在脑海中脑补一张总结图,把每个布局的特点以及它们的使用场景进行归纳,这样就可以组织语言去描述它们。
解答:
①线性布局:它里面的子控件是按照垂直或者水平方向来一个接一个地进行排列,当需要界面的控件是线性排列的时候可以使用线性布局;
②相对布局:控件之间是根据某个控件作为参照物来进行排列,也就是相对某个控件来设置位置,当在一些比较多的控件且复杂的情况下可以使用相对布局,这样就可以比较灵活地安排控件的位置;
③帧布局:所有的子控件默认是放在布局左上角的位置,后面的控件会覆盖在前一个控件上,如果想改变位置则可以使用属性android:layout_gravity=“Left”或者android:layout_marginLeft=“数字”等。帧布局可以用于一些简单的界面;
④约束布局:通过可视化方式来拖拽控件的位置,当然前提是要给控件的4个方向设置约束,想更加具体地设置控件的各种属性则可以在右边的工作台上进行设置。相当于高级版RelativeLayout,当布局的层级嵌套比较多可以使用约束布局。
2)布局中有个属性android:weight,它有什么用?
思路:属性android:weight是LinearLayout使用的一个属性,它是一个比例值,是控件的大小占屏幕的比例值。
解答:
例如现在在LinearLayout里定义了两个控件分别是EditText和Button,使用属性android:weight对它们进行排列:
可以看到属性android:layout_width="0dp",因为要计算组件的宽度占屏幕宽度的比例,所以这里就要把它们的宽度都要设置0dp,然后再分别定义它们的weight为4和1,布局效果如图2.5所示。
图2.5 布局效果
在这里可以看到EditText的宽度占了一大半还多,而Button则只占一小块,那么这个所占的位置比例是怎么算的?其实就是系统先把每个控件设置的weight值加起来得到一个总值,然后每个控件的大小占屏幕大小的比例值就等于控件它自己的weight除以总值。所以这里的EditText的weight是4,Button的weight是1,所以总值是5,EditText的占比则为4/5,Button的占比则为1/5。