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

    xiaoxiao2021-12-14  19

    原文:http://blog.csdn.net/lzx_bupt/article/details/5600187

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

     

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

     

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

     

    首先构建子Layout:main2

    [xhtml]  view plain  copy <?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

     

    [xhtml]  view plain  copy <?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:

    [java]  view plain  copy 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类:

    [java]  view plain  copy 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);            //在此你可以封装很多方法        }      }  

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

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

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

    转载请注明原文地址: https://ju.6miu.com/read-963526.html

    最新回复(0)