iqingfen 2013-10-25
这里使用的是Android 2.3.3。
该例子使用了相对布局RelativeLayout。
一、RelativeLayout相对布局
相对布局 RelativeLayout 允许子元素指定它们相对于其父元素或兄弟元素的位置,这是实际布局中最常用的布局方式之一。它灵活性大很多,当然属性也多,操作难度也大,属性之间产生冲突的的可能性也大,使用相对布局时要多做些测试。
二、界面

三、该例子还使用了Intent类和Bundle类
1.Intent
a.在一个Android应用中,主要是由四种组件组成的,这四种组件可参考“Android应用的构成”。
而这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的Android应用。
b.在这些组件之间的通讯中,主要是由Intent协助完成的。Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。
2.Bundle
Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值。相对于Map,它提供了各种常用类型的putXxx()/getXxx()方法,如:putString()/getString()和putInt()/getInt(),putXxx()用于往Bundle对象放入数据,getXxx()方法用于从Bundle对象里获取数据。Bundle的内部实际上是使用了HashMap类型的变量来存放putXxx()方法放入的值.
四、main.xml(数据输入的页面)和info.xml(显示结果的页面)
main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/TextView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp"
android:text="计算你/妳的标准体重"
android:textSize="24sp" />
<TextView
android:id="@+id/TextView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/TextView1"
android:layout_below="@+id/TextView1"
android:layout_marginTop="30dp"
android:text="性别"
android:textSize="20sp" >
</TextView>
<!-- 单选按钮组 -->
<RadioGroup
android:id="@+id/sexGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/TextView2"
android:layout_marginLeft="20dp"
android:layout_toRightOf="@+id/TextView2" >
<!-- 单选按钮 -->
<RadioButton
android:id="@+id/radMale"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="男" >
</RadioButton>
<!-- 单选按钮 -->
<RadioButton
android:id="@+id/radFemale"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="女" >
</RadioButton>
</RadioGroup>
<TextView
android:id="@+id/TextView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/TextView1"
android:layout_below="@+id/sexGroup"
android:layout_marginTop="29dp"
android:text="身高"
android:textSize="20sp" >
</TextView>
<EditText
android:id="@+id/heightNumber"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/sexGroup"
android:layout_alignTop="@+id/TextView3"
android:hint="(单位:厘米)"
android:inputType="numberDecimal" >
</EditText>
<Button
android:id="@+id/btnCalc"
android:layout_centerHorizontal="true"
android:layout_width="134dp"
android:layout_height="wrap_content"
android:layout_below="@+id/heightNumber"
android:layout_marginTop="37dp"
android:layout_toRightOf="@+id/TextView2"
android:text="计算" >
</Button>
</RelativeLayout>info.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/txtInfo"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#ff0"
android:textSize="25sp" />
</LinearLayout>五、Activity类,包含两个,DataTransferActivity.java(数据输入)和ShowInfoActivity.java(显示结果)
DataTransferActivity
package org.e276.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
/**
* 输入数据的Activity
*
* @author miao
*
*/
public class DataTransferActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 计算体重的按钮
Button btnCalc = (Button) findViewById(R.id.btnCalc);
btnCalc.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// 得到体重的值
EditText et = (EditText) findViewById(R.id.heightNumber);
double height = Double.parseDouble(et.getText().toString());
// 得到性别
String sex = "女";
RadioButton radMale = (RadioButton) findViewById(R.id.radMale);
if (radMale.isChecked()) {
sex = "男";
}
// 实例化一个Intent对象,并制定class
Intent intent = new Intent();
intent.setClass(DataTransferActivity.this,
ShowInfoActivity.class);
// 实例化Bundle,并将要传递的数据传入
Bundle bundle = new Bundle();
bundle.putDouble("height", height);
bundle.putString("sex", sex);
// 将Bundle对象分配给Intent对象
intent.putExtras(bundle);
// 调用另一个Activity
startActivity(intent);
}
});
}
}
ShowInfoActivity
package org.e276.activity;
import java.text.DecimalFormat;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
/**
* 显示信息
*
* @author miao
*
*/
public class ShowInfoActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.info);
// 取得Intent对象中的Bundle对象
Bundle bundle = getIntent().getExtras();
// 取得Bundle中的数据
String sex = bundle.getString("sex");
double height = bundle.getDouble("height");
TextView tv = (TextView) findViewById(R.id.txtInfo);
tv.setText(String.format("你是一位%s士\n你的身高是%d厘米\n你的标准体重是:%s公斤", sex,
(int) height, getWeight(sex, height)));
}
/**
* 根据性别和身高得到体重
*/
private String getWeight(String sex, double height) {
DecimalFormat f = new DecimalFormat("0.00");
String weight = "";
if (sex.equals("男")) {
weight = f.format((height - 80) * 0.7);
} else {
weight = f.format((height - 70) * 0.6);
}
return weight;
}
}
六、AndroidManifest.xml,因为有2个类,所有也要在配置文件里配置
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.e276.activity"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<application
android:icon="@drawable/psb"
android:label="@string/app_name" >
<activity
android:name=".DataTransferActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ShowInfoActivity" android:label="显示体重" />
</application>
</manifest>七、demo
Android-CalcWeight.zip