图片看http://www.curious-creature.org/2009/03/01/android-layout-tricks-3-optimize-part-1/
< merge
xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:okCancelBar = "http://schemas.android.com/apk/res/com.example.android.merge" >
< ImageView
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:scaleType = "center"
android:src = "@drawable/golden_gate" />
< com . example . android . merge . OkCancelBar
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:layout_gravity = "bottom"
android:paddingTop = "8dip"
android:gravity = "center_horizontal"
android:background = "#AA000000"
okCancelBar:okLabel = "Save"
okCancelBar:cancelLabel = "Don't save" />
</ merge > com . example . android . merge . OkCancelBar
是一个自定义的GROUP
public class OkCancelBar extends LinearLayout {
public OkCancelBar ( Context context , AttributeSet attrs ) {
super ( context , attrs );
setOrientation ( HORIZONTAL );
setGravity ( Gravity . CENTER );
setWeightSum ( 1.0f );
LayoutInflater . from ( context ). inflate ( R . layout . okcancelbar , this , true );
TypedArray array = context . obtainStyledAttributes ( attrs , R . styleable . OkCancelBar , 0 , 0 );
String text = array . getString ( R . styleable . OkCancelBar_okLabel );
if ( text == null ) text = "Ok" ;
(( Button ) findViewById ( R . id . okcancelbar_ok )). setText ( text );
text = array . getString ( R . styleable . OkCancelBar_cancelLabel );
if ( text == null ) text = "Cancel" ;
(( Button ) findViewById ( R . id . okcancelbar_cancel )). setText ( text );
array . recycle ();
}
}
LayoutInflater . from ( context ). inflate ( R . layout . okcancelbar , this , true );
直接从XML中得到一个VIEW加入到当前GROUP中
okcancelbar .xml:
< merge xmlns:android = "http://schemas.android.com/apk/res/android" >
< include
layout = "@layout/okcancelbar_button"
android:id = "@+id/okcancelbar_ok" />
< include
layout = "@layout/okcancelbar_button"
android:id = "@+id/okcancelbar_cancel" />
</ merge >