近期对android里面控件修改做了很多实验,由于公司需求很多,不得不重写很多控件。程序目标无非是:高效、轻巧、清晰、标准化
完成动态加载Layout有两种方法,依据个人喜好进行选择:
方法1:静态主Layout动态加载静态子Layout
首先构建子Layout:main2
[xhtml] view
plaincopy
- <?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
plaincopy
- <?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
plaincopy
- 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
plaincopy
- 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
plaincopy
- 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的两种形式,里面可思考的很多,比如封装常用事件、资源,从而节省代码、节省资源;
抛砖引玉,分享经验,希望能助大家优化自己的程序。
时间: 2024-09-20 17:25:19