步步为营学习android,步步惊喜之android基础篇-布局学习3之代码布局3

来源:互联网 发布:sam源码 编辑:程序博客网 时间:2024/05/16 01:07

                                                       布局学习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两个方法。

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

http://download.csdn.net/detail/tianke0711/4674969




原创粉丝点击