android 程式开发:(十)绘制用户界面 —— 10.1通过纯编码实现UI

来源:互联网 发布:图片大小批处理软件 编辑:程序博客网 时间:2024/06/06 00:08
 

到目前为止,在所有的章节中,我们所看见的UI都是通过XML来实现的。之前也提及过,除了使用XML,也可以使用代码来实现UI界面。这个方式是很有用的,比如你的UI需要在运行时被生成。举个例子,假设你在编写一个“电影票的预定系统”,你的程序使用按钮Buttons去显示每个电影院的座位。在这种情况下,你就会需要依据实际情况去动态地生成UI。

下面的例子将会展示如何通过编码,动态地在Activity中生成UI。

1、创建一个工程:UICode。

2、UICodeActivity.java中的代码。

[java] view plaincopyprint?
  1. public class UICodeActivityextends Activity { 
  2.     /** Called when the activity is first created. */ 
  3.     @Override 
  4.     public void onCreate(Bundle savedInstanceState) { 
  5.         super.onCreate(savedInstanceState); 
  6.         //setContentView(R.layout.main); 
  7.         // 视图的参数 
  8.         LayoutParams params =  
  9.             new LinearLayout.LayoutParams( 
  10.                 LayoutParams.FILL_PARENT, 
  11.                 LayoutParams.WRAP_CONTENT); 
  12.  
  13.         // 创建布局 
  14.         LinearLayout layout = new LinearLayout(this); 
  15.         layout.setOrientation(LinearLayout.VERTICAL); 
  16.  
  17.         // 创建一个TextView 
  18.         TextView tv = new TextView(this); 
  19.         tv.setText("This is a TextView"); 
  20.         tv.setLayoutParams(params); 
  21.  
  22.         // 创建一个Button 
  23.         Button btn = new Button(this); 
  24.         btn.setText("This is a Button"); 
  25.         btn.setLayoutParams(params); 
  26.                          
  27.         // 向布局中添加TextView 
  28.         layout.addView(tv); 
  29.  
  30.         // 向布局中添加Button 
  31.         layout.addView(btn); 
  32.  
  33.         // 创建布局使用的属性 
  34.         LinearLayout.LayoutParams layoutParam =  
  35.             new LinearLayout.LayoutParams( 
  36.                     LayoutParams.FILL_PARENT, 
  37.                     LayoutParams.WRAP_CONTENT ); 
  38.  
  39.         this.addContentView(layout, layoutParam); 
  40.     } 

3、按F11调试,效果图如下。


在这个例子中,首先要把setContentView()方法注释掉,目的是不让Activity去加载main.xml中的UI视图。

然后,创建一个LayoutParams对象,这个对象指定了布局的属性。

[java] view plaincopyprint?
  1. LayoutParams params =  
  2.     new LinearLayout.LayoutParams( 
  3.         LayoutParams.FILL_PARENT, 
  4.         LayoutParams.WRAP_CONTENT); 
也要创建一个LinearLayout对象,这个对象包含了activity中的所有视图。

[java] view plaincopyprint?
  1. LinearLayout layout = new LinearLayout(this); 
  2. layout.setOrientation(LinearLayout.VERTICAL); 
然后,创建一个TextView和一个Button。

[java] view plaincopyprint?
  1. TextView tv = new TextView(this); 
  2. tv.setText("This is a TextView"); 
  3. tv.setLayoutParams(params); 
  4.  
  5. Button btn = new Button(this); 
  6. btn.setText("This is a Button"); 
  7. btn.setLayoutParams(params); 
然后,把它们加到LinearLayout对象中去。

[java] view plaincopyprint?
  1. layout.addView(tv); 
  2.  
  3. layout.addView(btn); 
同时,也要创建一个LayoutParams对象,供LinearLayout对象使用。

[java] view plaincopyprint?
  1. LinearLayout.LayoutParams layoutParam =  
  2.     new LinearLayout.LayoutParams( 
  3.             LayoutParams.FILL_PARENT, 
  4.             LayoutParams.WRAP_CONTENT ); 
最后,把这个LinearLayout对象添加到Activity中去。

[java] view plaincopyprint?
  1. this.addContentView(layout, layoutParam);