动态生成控件

来源:互联网 发布:d3.js 入门案例 编辑:程序博客网 时间:2024/04/30 10:45
package com.example.uitest;import android.app.Activity;import android.os.Bundle;import android.widget.Button;import android.widget.LinearLayout;import android.widget.TextView;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;public class MainActivity extends Activity {    private Button btNext;        /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        btNext=(Button)findViewById(R.id.next);        btNext.setOnClickListener(new Button.OnClickListener(){            public void onClick(View view){                 //创建一个布局管理器控件                LinearLayout linearLayout=new LinearLayout(MainActivity.this);                setContentView(linearLayout);                //设置orientation为horizontal,1表示为vertical                linearLayout.setOrientation(1);                TextView tvSecond=new TextView(MainActivity.this);                tvSecond.setText("这是Android奉献给你的第二个页面");                Button btNext2_1=new Button(MainActivity.this);                btNext2_1.setText("下一步");                btNext2_1.setId(2);                           Button btNext2_2=new Button(MainActivity.this);                btNext2_2.setText("上一步");                btNext2_2.setId(3);                                LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams(                LinearLayout.LayoutParams.FILL_PARENT,                LinearLayout.LayoutParams.WRAP_CONTENT);                linearLayout.addView(tvSecond,lp1);                linearLayout.addView(btNext2_1,lp1);                linearLayout.addView(btNext2_2,lp1);                btNext2_1.setOnClickListener(new OnClickListener(){                    public void onClick(View view){                                    //这次只放置一个TextView不需要布局管理器                        TextView tv3=new TextView(MainActivity.this);                        tv3.setText("恭喜你已来到最后一个页面!");                           //直接让页面显示一个TextView                        setContentView(tv3);                    }                });                btNext2_2.setOnClickListener(new OnClickListener(){                    public void onClick(View view){                                    //这次只放置一个TextView不需要布局管理器                                               setContentView(R.layout.test1);                    }                });            }        });    }}                   

这里涉及到几个类的构造函数和方法,我把Android SDK文档中的内容直接引用过来:

 

Public Constructors

 

LinearLayout(Context context)

LinearLayout(Context context, AttributeSet attrs)

 

public void setOrientation (int orientation)

Should the layout be a column or a row.

Related XML Attributes

android:orientation

Parameters  orientation  Pass HORIZONTAL or VERTICAL. Default value is HORIZONTAL.

 

Constant    Value    Description

horizontal  0      Defines an horizontal widget.

vertical     1      Defines a vertical widget.

This corresponds to the global attribute resource symbol orientation.

 

Public Constructors

LinearLayout.LayoutParams(Context c, AttributeSet attrs)

LinearLayout.LayoutParams(int width, int height)

 

addView方法的定义在ViewGroup类中

//Adds a child view with the specified layout parameters.

void   addView(View child, ViewGroup.LayoutParams params)

//Adds a child view with the specified layout parameters.

void    addView(View child, int index, ViewGroup.LayoutParams params)

看一下这里的继承关系:

java.lang.Object   ↳android.view.View    ↳android.view.ViewGroup     ↳android.widget.LinearLayout

 

 

另外注意,为什么在传递Context参数时必须用Show.this而不能直接用this呢?因为此时我们已经进入了一个匿名类new Button.OnClickListener()中,虽然这个匿名类还是在Show类,但是我们的代码已经不再“直属”于Show类了。

运行效果图:

 

原文来自:博客园(华夏35度)http://www.cnblogs.com/zhangchaoyang 作者:Orisun

0 0
原创粉丝点击