三、Ophone程序代码实现
再来分析用户的需求,我们可以发现,在体重参考和身高参考两个界面中,唯一不同的地方就是计量单位不同,一个是输入身高输出体重参考,一个是输入体重输出身高参考;健康参考界面和前两个界面的差别略大。完成该程序的流程如图2-2所示。

▲图2-2 完成该程序的流程
先不要忙着想界面的切换,我们首先做一个单界面的程序,用来实现用户的第一个需求:根据体重给出身高的正常范围。通过这个程序的编写,我们可以熟悉界面设计、控件响应、方法调用。
在新建一个工程之后,双击res/layout/main.xml文件,出现可视化XML编辑器界面。将控件拖入屏幕区域,实现如图2-3所示结构,用鼠标右键单击该控件选择“Properties”,可以设置控件属性。这里LinearLayout01的orientation是垂直的(Vertical),LinearLayout02是水平的(Horizontal)。可以通过设置控件的Text属性来修改控件上显示的文字,将EditText01的Input Type属性改成Input type numberDecimal,使其只能输入数字(含小数),在代码中无需进行数字字符判断。编辑完成后,界面效果如图2-4所示。

▲图2-3 程序界面结构

▲图2-4 程序界面效果
运行该工程,就可以看到界面,但是单击“查看”按钮什么都没有发生。而且在单选按钮中选项都没有被选中。我们回到Eclipse中,将RadioButton01的Checked属性选择为True,并在代码编辑器窗口填写下列代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String[] str={"男","女"};
final Spinner gender = (Spinner) findViewById(R.id.Spinner01);
ArrayAdapter adapter = new ArrayAdapter(
this, android.R.layout.simple_spinner_item, str);
adapter.setDropDownViewResource(android.R.
layout.simple_spinner_dropdown_item);
gender.setAdapter(adapter);
Button button = (Button)findViewById(R.id.Button01);
button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
TextView tv = (TextView)findViewById(R.id.TextView01);
EditText data = (EditText)findViewById(R.id.EditText01);
RadioButton kg = (RadioButton)findViewById(R.id.RadioButton01);
float wt =Float.valueOf(data.getText().toString());
float h1,h2;
if (!kg.isChecked()) wt=(float) (wt/2.2);
if(gender.getSelectedItem().toString().equals("男")) {
h1 = (float) (wt*0.9+100);
h2 = (float) (wt*1.1+100);
}else {
h1 = (float) (wt*0.9+105);
h2 = (float) (wt*1.1+105);
}
tv.append("身高范围是:"+String.valueOf(h1)+"米--"+
String.valueOf(h2)+"米"+"\n");
}
});
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String[] str={"男","女"};
final Spinner gender = (Spinner) findViewById(R.id.Spinner01);
ArrayAdapter adapter = new ArrayAdapter(
this, android.R.layout.simple_spinner_item, str);
adapter.setDropDownViewResource(android.R.
layout.simple_spinner_dropdown_item);
gender.setAdapter(adapter);
Button button = (Button)findViewById(R.id.Button01);
button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
TextView tv = (TextView)findViewById(R.id.TextView01);
EditText data = (EditText)findViewById(R.id.EditText01);
RadioButton kg = (RadioButton)findViewById(R.id.RadioButton01);
float wt =Float.valueOf(data.getText().toString());
float h1,h2;
if (!kg.isChecked()) wt=(float) (wt/2.2);
if(gender.getSelectedItem().toString().equals("男")) {
h1 = (float) (wt*0.9+100);
h2 = (float) (wt*1.1+100);
}else {
h1 = (float) (wt*0.9+105);
h2 = (float) (wt*1.1+105);
}
tv.append("身高范围是:"+String.valueOf(h1)+"米--"+
String.valueOf(h2)+"米"+"\n");
}
});
}
运行工程,可以看到如图2-5所示结果。

▲图2-5 单界面程序运行结果