android: 静态XML和动态加载XML混合使用,以及重写Layout控件
近期对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-->相关推荐
hzq0 2020-10-05
Crazyshark 2020-09-05
willowwgx 2020-07-27
linjava 2020-06-14
tuxlcsdn 2020-06-13
池塘 2020-06-07
liqinglin0 2020-06-01
liqinglin0 2020-06-01
jvm 2020-05-30
deadgrape 2020-05-16
luohui 2020-05-15
一个逗逗 2020-04-16
Ericbig 2020-03-03
hellobabygogo 2020-02-21
morexyoung 2020-02-21
lmseohy 2020-02-21
doubinning 2020-02-18