其实很多复杂的布局都可以切成一小部分的布局然后去组合而成的。
比如我有一张照片,我想给他加个相框,而这张照片必须是可以被客户自行选择的,整个相片相框又必须作为一个图片放在一个固定的位置。其实如果是一张固定的照片,那么一开始就可以用PS把照片和相框做成一张图片的,但要被客户指定的话,也可以把相框和相处做成一个整体的(当然也可以没必要,如果你有自信控制界面不变形的话,这里只是举个例子说明一下)。
图片组合可以使用layer-list标签。在drawable目录下新建个XML文件。
要用2张图片叠加起来,看上去形成一张图片
首先创建一个drawalbe/login_head.xml的文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<layer-list
xmlns:Android="http://schemas.android.com/apk/res/android">
<item Android:id="@+id/user_faceback_drawable" android:drawable="@drawable/faceback" />
<item Android:id="@+id/user_face_drawable" android:drawable="@drawable/h001" android:left="10.0dip" android:top="18.0dip" android:right="25.0dip" android:bottom="35.0dip" />
</layer-list>
然后就可以使用这个组合的图片了,比如在ImageView中显示:
<ImageView Android:id="@+id/faceImg" android:background="@drawable/login_head"
Android:layout_width="wrap_content" android:layout_height="wrap_content" />
在java代码中引用:
((ImageView) findViewById(R.id.imageview)).setImageDrawable(getResources().getDrawable(R.drawable.drawable-layer)
在代码中也可以实现layer,更可以动态来控制:
Resources resources = getResources();
Drawable[] layers = new Drawable[2];
layers[0] = r.getDrawable(R.drawable.white);
layers[1] = r.getDrawable(R.drawable.logo_overlay);
LayerDrawable layerDrawable = new LayerDrawable(layers)
((ImageView) findViewById(R.id.imageview)).setImageDrawable(layerDrawable);
在layer-list的item中也可以使用更多的其他属性标签,例如:
<shape>
<gradient android:angle="270" android:endColor="#4559F3"
android:startColor="#4559F3" />
<size android:height="60dp" android:width="320dp" />
<corners android:topLeftRadius="10dip"
android:topRightRadius="10dip"
android:bottomLeftRadius="10dip"
android:bottomRightRadius="10dip"/>
</shape>
第一个item排在最下层,第二个item排在上面,当然还可以排三层、四层......,item之间最好产生距离,不然上层的会挡住下层的。
有时候有些复杂的布局就不是几个图片组合就能搞定的,然后就需要多个XML布局来组合了。就是一个网页一样,有头部尾部有母版页有控件,可以重复自由组合成一个网页。Android也可以。使用include就能做到,同时可以配合merge。
android的merge学习:http://www.cnblogs.com/travelfromandroid/articles/2133206.html