近期对android里面控件修改做了很多实验,由于公司需求很多,不得不重写很多控件。程序目标无非是:高效、轻巧、清晰、标准化
完成动态加载Layout有两种方法,依据个人喜好进行选择:
方法1:静态主Layout动态加载静态子Layout
首先构建子Layout:main2
-
<?xml version="1.0" encoding="utf-8"?>
-
-
<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">
-
-
<ImageButton android:id="@+id/button1"
-
android:src="@drawable/btn1"
-
android:layout_width="wrap_content"
-
android:layout_height="wrap_content"
-
></ImageButton>
-
-
<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">
-
-
<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 {
-
-
-
private View mBarView;
-
-
private LinearLayout mLinearLayout;
-
-
public void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
-
setContentView(R.layout.main);
-
-
mBarView = View.inflate(this, R.layout.main2, null);
-
-
mLinearLayout = (LinearLayout)findViewById(R.id.box);
-
-
mLinearLayout.addView(mBarView);
-
}
方法2:静态主Layout动态加载动态的Layout
首先构造你自己的子Layout和上面一样;
然后构建你自定义的Layout类:
-
public class MenuLandscapeLinearLayout extends LinearLayout{
-
-
public MenuLandscapeLinearLayout(Context context) {
-
super(context);
-
-
-
((Activity) getContext()).getLayoutInflater().inflate(R.layout.main2, this);
-
-
}
-
}
最后在程序中动态实例化并加载即可:
-
public class BackgroundTest extends Activity {
-
-
private LinearLayout mLinearLayout;
-
-
private MenuLandscapeLinearLayout mMenuLandscapeLinearLayout;
-
@Override
-
public void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
-
setContentView(R.layout.main);
-
-
mLinearLayout = (LinearLayout)findViewById(R.id.box);
-
-
mMenuLandscapeLinearLayout=new MenuLandscapeLinearLayout(this);
-
-
mLinearLayout.addView(mMenuLandscapeLinearLayout);
-
}
-
}
至此,完成了动态加载子Layout的两种形式,里面可思考的很多,比如封装常用事件、资源,从而节省代码、节省资源;
抛砖引玉,分享经验,希望能助大家优化自己的程序。