Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1814425
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: 嵌入式

2012-03-25 21:21:34

Android里所有的UI控件都有一个共同的基类View。View里有一种类型是可以包含其它一些子控件的,它就是ViewGroup。而ViewGroup的子类Layout更加明确地定义了自己的功能:包含一些子控件并对它们排版,比如LinearLayout。Layout类包括:LinearLayout、RelativeLayout、TableLayout、DatePicker、TimePicker、Form Stuff、Spinner、AutoComplete、ListView、GridView、Gallery、TabWidget、MapView、WebView等。

Layout可以在xml里定义,可以参考前面的LinearLayout的例子。下面介绍下代码里怎么添加layout:


  1. package tommy.myandroid;

  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.widget.EditText;
  5. import android.widget.LinearLayout;
  6. import android.widget.TextView;

  7. public class LayoutActivity extends Activity {

  8.     @Override
  9.     protected void onCreate(Bundle savedInstanceState) {
  10.         super.onCreate(savedInstanceState);

  11.         LinearLayout ll = new LinearLayout(this);
  12.         ll.setOrientation(LinearLayout.VERTICAL);
  13.         TextView tv = new TextView(this);
  14.         tv.setText("Here is text view");
  15.         EditText ev = new EditText(this);
  16.         ev.setText("Edit text here");
  17.         final int width = LinearLayout.LayoutParams.FILL_PARENT;
  18.         final int height = LinearLayout.LayoutParams.WRAP_CONTENT;
  19.         ll.addView(tv, new LinearLayout.LayoutParams(width, height));
  20.         ll.addView(ev, new LinearLayout.LayoutParams(width, height));
  21.         setContentView(ll);
  22.     }
  23. }

运行结果:


自定一个组合控件

我们可以自定义一些由一些基本控件组合而成的控件。比如上例中的TextView和EidtText的组合:


  1. package tommy.myandroid;

  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.os.Bundle;
  5. import android.util.AttributeSet;
  6. import android.widget.EditText;
  7. import android.widget.LinearLayout;
  8. import android.widget.TextView;

  9. class CompoundView extends LinearLayout {
  10.     public CompoundView(Context context) {
  11.         super(context);
  12.         init();
  13.     }
  14.     
  15.     public CompoundView(Context context, AttributeSet attrs) {
  16.         super(context, attrs);
  17.         init();
  18.     }
  19.     
  20.     private void init() {
  21.         setOrientation(LinearLayout.VERTICAL);
  22.         TextView tv = new TextView(getContext());
  23.         tv.setText("Here is text view");
  24.         EditText ev = new EditText(getContext());
  25.         ev.setText("Edit text here");
  26.         final int width = LinearLayout.LayoutParams.FILL_PARENT;
  27.         final int height = LinearLayout.LayoutParams.WRAP_CONTENT;
  28.         addView(tv, new LinearLayout.LayoutParams(width, height));
  29.         addView(ev, new LinearLayout.LayoutParams(width, height));
  30.     }
  31. }

  32. public class LayoutActivity extends Activity {

  33.     @Override
  34.     protected void onCreate(Bundle savedInstanceState) {
  35.         super.onCreate(savedInstanceState);
  36.         setContentView(new CompoundView(this));
  37.     }
  38. }

运行的结果和上例一样。不过,如果需要组合的话,最好还是定义在一个xml里,作为一个resource来重用。
阅读(1036) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~