Android面试之布局
1.请说出Android中的五种布局,并简单介绍它们的作用。
答:
FrameLayout(帧布局)在布局中View都会以层叠方式显示,类似于PhotoShop的图层。放在最后的View会显示在最上层。
LinearLayout(线性布局)可以将多个view水平或垂直排列。android:orientation属性的值为horizonal和vertical,view会呈水平和垂直排列。
RelativeLayout(相对布局)可以通过确定两个或多个组件的相对位置来摆放。
TableLayout(表格布局)可以将view按表格形式排列。
AbsoluteLayout(绝对布局)可以设置view的绝对坐标,但并不建议使用,因为无法适合屏幕分辨率的变化。
2 . FrameLayout的主要用途。
答: FrameLayout主要用于进行层次结构的布局。例如:想把两个图像叠加到一起形成一张图像的效果就可以用 FrameLayout。
3. 现在有三个按钮,如何让这3个按钮以水平方向分别左对齐,居中对齐和右对齐。
分析: FrameLayout是最容易实现的,每一个view的XML标签都有一个android:layout_gravity属性,通过设置该属性,可以在 FrameLayout中实现任何方向的对齐布局。这一点与LinearLayout不同,在LinearLayout中的view并不是对每一个android:layout_gravity的属性起作用。所以最容易实现的是FrameLayout。
4.FrameLayout中的view都是层叠摆放的,后一个view会覆盖前一个view这种说法对吗?说明原因。
不正确。FrameLayout中的view只有在所有的view同样大小时,并且在同一个位置时才会被覆盖。否则,view是以层叠方式显示的。
5. 如何获取LinearLayout的宽度和高度???
*调用view.measure方法测量组件的宽度和高度,然后用view.getMeasuredWidth和view.getMeasuredheight方法获取宽高。
*直接获取布局文件中的宽高用View。getLayoutParams().width和getLayoutParams().height方法。
6.如何将当前界面的可视组件以同样的相对位置大小保存在PNG图像文件中??(将布局存成图像),写出实际代码:
<span style="color:#000000;">View view = getLayoutInflater().inflate(R.layout.hehe, null);// 打开图像缓存view.setDrawingCacheEnabled(true);// 必须要调用measure和Layout方法才能成功保存可视组件的截图到PNG图像文件// 测量view的大小view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));// 发送位置和尺寸到view及其所有的子viewview.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());try {// 获取可视组件的截图Bitmap bitmap = view.getDrawingCache();// 将截图保存在SD卡根目录的text.png图像文件中FileOutputStream fos = new FileOutputStream("/sdcard/text.png");// 将Bitmap对象中的图像数据压缩成png格式的图像数据,并将这些数据保存在text.png文件中bitmap.compress(CompressFormat.PNG, 100, fos);fos.close();} catch (Exception e) {// TODO: handle exception}}</span>
7.如何重用布局文件?
可以使用<include>标签引用其他布局文件,并用android:id来覆盖引用布局文件中顶层节点的android:id属性值。代码如下:
<span style="color:#000000;"><!-- 引用布局hehe文件 --><include android:id="@+id/layout1" layout="@layout/hehe"></include></span>
8.android:padding 属性和android:layout_margin属性的区别 :
android:padding属性用于设置view中的内容距view边缘的距离,而android:layout_margin用于设置view距离其他view或父容器边缘的距离。
(待续)