android: 静态XML和动态加载XML混合使用,以及重写Layout控件

ChainDestiny 2011-10-26

近期对android里面控件修改做了很多实验,由于公司需求很多,不得不重写很多控件。程序目标无非是:高效、轻巧、清晰、标准化

完成动态加载Layout有两种方法,依据个人喜好进行选择:

方法1:静态主Layout动态加载静态子Layout

首先构建子Layout:main2

public   class  BackgroundTest  extends  Activity {  
    /** Called when the activity is first created. */   
//      子Layout要以view的形式加入到主Layout中   
    private  View mBarView;  
//      主Layout的容器加载子Layout的View   
    private  LinearLayout mLinearLayout;  
//给出关键内容   
public   void  onCreate(Bundle savedInstanceState) {  
        super .onCreate(savedInstanceState);  
//      显示主Layout   
        setContentView(R.layout.main);   
//      加载子Layout          
        mBarView = View.inflate(this , R.layout.main2,  null );  
//      找到容器   
        mLinearLayout = (LinearLayout)findViewById(R.id.box);  
//      加上View 结束   
        mLinearLayout.addView(mBarView);  
}  

方法2:静态主Layout动态加载动态的Layout

首先构造你自己的子Layout和上面一样;

然后构建你自定义的Layout类:

public   class  MenuLandscapeLinearLayout  extends  LinearLayout{   
//  构造函数   
    public  MenuLandscapeLinearLayout(Context context) {  
    super (context);  
    // TODO Auto-generated constructor stub   
    //加载需要的属性,加载方法一的子Layout   
    ((Activity) getContext()).getLayoutInflater().inflate(R.layout.main2, this );   
        //在此你可以封装很多方法    
    }     
}  

最后在程序中动态实例化并加载即可:

public   class  BackgroundTest  extends  Activity {  
    /** Called when the activity is first created. */   
    private  LinearLayout mLinearLayout;  
    //声明一个子Layout View对象   
    private  MenuLandscapeLinearLayout mMenuLandscapeLinearLayout;  
    @Override   
    public   void  onCreate(Bundle savedInstanceState) {  
        super .onCreate(savedInstanceState);  
//      加载主Layout   
        setContentView(R.layout.main);    
//      找到容器         
        mLinearLayout = (LinearLayout)findViewById(R.id.box);  
//      实例化一个子View   
        mMenuLandscapeLinearLayout=new  MenuLandscapeLinearLayout( this );  
//      添加到容器   
        mLinearLayout.addView(mMenuLandscapeLinearLayout);  
    }  
}  

至此,完成了动态加载子Layout的两种形式,里面可思考的很多,比如封装常用事件、资源,从而节省代码、节省资源;

抛砖引玉,分享经验,希望能助大家优化自己的程序。

<!--EndFragment-->

相关推荐

82550495 / 0评论 2020-03-01