布局学习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);
   }
}

 运行结果:


Android 代码设置水平布局_button



我们发现没有看到Button按钮画面。是什么原因导致的?

其实在开始我们设置linearlayout的时候设置排列方式是垂直排列,因为view1大小是屏幕大小所以button只能在view1的下面。如果想看到button有下面几种方法实现:

第一种方法:调换添加顺序。先添加b1,然后添加view1。

l1.addView(b1,ll1);
       l1.addView(view1, ll2); 
       setContentView(l1);


运行结果是:

Android 代码设置水平布局_UI_02




不过这里需要注意的是设置button的大小不能长度与宽度都是fillparent,不然看不到view1,特别是长应该是wrap content。

第二种方法设置view1的大小,不然view1全屏。即使没有调换顺序,也可以看到button。

比如我设置ll2长宽位:

LinearLayout.LayoutParamsll2 = new LinearLayout.LayoutParams(100,100);

运行结果如下:


Android 代码设置水平布局_UI_03



第三种方法:用addContentView方法,也是最好的方法.

l1.addView(b1,ll1);
       // l1.addView(view1, ll2);
       setContentView(l1);
        addContentView(view1, ll1);

  这里我们通过addContentView来添加。

注意一点先setContentView,然后addContentView。如果反过来结果如何:看运行结果:


Android 代码设置水平布局_button_04



发现view1(圆形)看不到了,究竟是什么原因呢?在解答这个问题前我们如果把setContentView改成addContentView。看看运行结果:

Android 代码设置水平布局_button_05

我们发现圆形出现了。

  让我们来回答刚才的问题,也就是引出我们今天的一个重要知识点:

  setContentView 和addContentView的区别:

两者的区别主要包括两点:

1. 以添加UI组件是否被移除

setContentView() 会导致先前添加的被移除,即替换性的;刚才为什么看不到圆形(先addContentView 后setContentView的时候)。因为最后setContentView把View1移除了啊!

而addContentView() 不会移除先前添加的UI组件,即是累积性的。为什么两个addContenView就能看到圆形的原因

2. 是否控制布局参数

addContentView() 有两个参数, 可以控制布局参数;

默认使用MATCH_PARENT;不过setContentView()也有带两个参数的版本, 可以控制布局参数。

最后还需要说明的是addView只能在布局中添加view不是拿来显示内容,显示内容的只有addContentView和setContenView两个方法。

最后一个运行画面的源代码下载,大家可以把注释去掉自己好好体会一下: