首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

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

2012-07-25 
转:android: 静态XML和动态加载XML混合使用,以及重写Layout控件近期对android里面控件修改做了很多实验,由

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

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

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

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

首先构建子Layout:main2

?

<? xml   version = "1.0"   encoding = "utf-8" ?>   <!--布局可以任意定义,此处拿线性布局举例,里面有2个按钮元素-->   < LinearLayout    xmlns:android = "http://schemas.android.com/apk/res/android"       android:id = "@+id/menubar"        android:background = "@drawable/menubar"       android:layout_width = "wrap_content"        android:layout_height = "wrap_content" >           <!--按钮1-->       < ImageButton   android:id = "@+id/button1"           android:src = "@drawable/btn1"           android:layout_width = "wrap_content"           android:layout_height = "wrap_content"       > </ ImageButton >       <!--按钮2-->       < ImageButton   android:id = "@+id/button2"           android:src = "@drawable/btn2"           android:layout_width = "wrap_content"           android:layout_height = "wrap_content"       > </ ImageButton >   </ LinearLayout >   

?

?

然后构建主Layout:main

?

<? xml   version = "1.0"   encoding = "utf-8" ?>   < RelativeLayout   xmlns:android = "http://schemas.android.com/apk/res/android"       android:id = "@+id/background"       android:layout_width = "fill_parent"       android:layout_height = "fill_parent"       android:background = "@drawable/background" >       <!--主Layout要给子Layout设置一个容器box,可以在此指定容器的位置,这段是关键部分-->       < LinearLayout   android:id = "@+id/box"           android:layout_alignParentBottom = "true"           android:layout_width = "wrap_content"           android:layout_height = "wrap_content"           android:layout_centerHorizontal = "true" >           </ LinearLayout >   </ RelativeLayout >   

?

最后在程序中加载子layout:

?

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的两种形式,里面可思考的很多,比如封装常用事件、资源,从而节省代码、节省资源;

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

?

转自:http://blog.csdn.net/wzrthhj/article/details/6570204

?

?

热点排行