在代码中控制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使用。