布局学习3之代码布局3
接着上面代码学习:
看下面代码:
publicclass CodeLayoutActivityextends Activity {
/** Called whenthe activity is first created. */
View1view1;
@Override
publicvoid onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
LinearLayout l1 =new LinearLayout(this);
view1 =new View1(this);
// view1.measure(100, 100);
view1.setBackgroundColor(Color.GREEN);
l1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
l1.setOrientation(LinearLayout.VERTICAL);
//l1.setBackgroundColor(Color.RED);
Button b1 =new Button(this);
b1.setText("Ok");
LinearLayout.LayoutParamsll1 =new
LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
LinearLayout.LayoutParamsll2 =newLinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
ll1.topMargin= 200;
ll1.leftMargin = 200;
l1.addView(view1, ll2);
l1.addView(b1,ll1);
//l1.addView(view1,ll2);
setContentView(l1);
//addContentView(view1,ll2);
//addContentView(b1,ll1);
}
}
运行结果:
我们发现没有看到Button按钮画面。是什么原因导致的?
其实在开始我们设置linearlayout的时候设置排列方式是垂直排列,因为view1大小是屏幕大小所以button只能在view1的下面。如果想看到button有下面几种方法实现:
第一种方法:调换添加顺序。先添加b1,然后添加view1。
l1.addView(b1,ll1);
l1.addView(view1, ll2);
setContentView(l1);
运行结果是:
不过这里需要注意的是设置button的大小不能长度与宽度都是fillparent,不然看不到view1,特别是长应该是wrap content。
第二种方法设置view1的大小,不然view1全屏。即使没有调换顺序,也可以看到button。
比如我设置ll2长宽位:
LinearLayout.LayoutParamsll2 = new LinearLayout.LayoutParams(100,100);
运行结果如下:
第三种方法:用addContentView方法,也是最好的方法.
l1.addView(b1,ll1);
// l1.addView(view1, ll2);
setContentView(l1);
addContentView(view1, ll1);
这里我们通过addContentView来添加。
注意一点先setContentView,然后addContentView。如果反过来结果如何:看运行结果:
发现view1(圆形)看不到了,究竟是什么原因呢?在解答这个问题前我们如果把setContentView改成addContentView。看看运行结果:
我们发现圆形出现了。
让我们来回答刚才的问题,也就是引出我们今天的一个重要知识点:
setContentView 和addContentView的区别:
两者的区别主要包括两点:
1. 以添加UI组件是否被移除
setContentView() 会导致先前添加的被移除,即替换性的;刚才为什么看不到圆形(先addContentView 后setContentView的时候)。因为最后setContentView把View1移除了啊!
而addContentView() 不会移除先前添加的UI组件,即是累积性的。为什么两个addContenView就能看到圆形的原因
2. 是否控制布局参数
addContentView() 有两个参数, 可以控制布局参数;
默认使用MATCH_PARENT;不过setContentView()也有带两个参数的版本, 可以控制布局参数。
最后还需要说明的是addView只能在布局中添加view不是拿来显示内容,显示内容的只有addContentView和setContenView两个方法。
最后一个运行画面的源代码下载,大家可以把注释去掉自己好好体会一下: