在代码中控制UI界面

虽然Android推荐使用XML布局文件来控制UI界面,但如果开发者愿意,Android允许开发者完全抛弃XML布局文件,完全在Java代码中控制UI界面。

实例:用编程的方式开发UI界面

package org.crazyit.helloworld;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.ViewGroup;
import android.widget.*;
import android.view.View;
import android.view.View.OnClickListener;

public class CodeView extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //创建一个线性布局管理器
        LinearLayout layout=new LinearLayout(this);
        //设置该Activity显示Layout
        super.setContentView(layout);
        layout.setOrientation(LinearLayout.VERTICAL);
        //创建一个TextView
        final TextView show=new TextView(this);
        //创建一个按钮
        Button bn=new Button(this);
        bn.setText(R.string.ok);
        bn.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));
        //向Layout容器中添加TextView
        layout.addView(show);
        //向Layout容器中添加按钮
        layout.addView(bn);
        //为按钮绑定一个事件监听 
        bn.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                show.setText("Hello,Android,"+new java.util.Date());
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.code_view, menu);
        return true;
    }

}

从上面的程度的粗体字代码可以看出,该程序中所用到的UI组件都是通过new关键字创建出来的,然后程序使用LinearLayout容器来“盛装”这些UI组件,这样就形成了图形用户界面。

从上面的程序代码中可以看出,无论创建哪种UI组件,都需要传入一个this参数,这是由于创建UI组件时传入一个Context参数,Context代表访问Android应用环境的全局信息的API。

让UI组件持有一个Context参数,可让这些UI组件通过该Context参数来获取Android应用环境的全局信息。

Context本身是一个抽象类,Android的应用的Activity、Service都继承了Context,因此Activity、Service都可直接作为Context使用。

posted @ 2013-09-24 21:27  TealerProg  Views(515)  Comments(0Edit  收藏  举报