目标:开发一款体质指数计算器,实现输入身高体重即可判断体型是否正常
知识点:Activity;布局;基本组件的使用
BMI是体质指数,公认的一种评定个人体质肥胖程度的分级方法,具体的计算方法是以体重除以身高的平方公式如下
体质指数(BMI)=体重(kg)/身高(m)^2
实现BMI需要用户输入身高体重,并点击计算按钮,显示结果,使用EditText实现用户身高的输入,使用textview将结果输出,主要练习android基本控件的使用,Textview是静态的文本空间,用于显示文字,可以在布局文件或者代码中设置显示内容,EditText是用于和用户交互的一个控件,接收用户的输入。
BMI界面设计
资源文件夹layout下的xml文件为设计界面的文件,BMI使用LinearLayout线性布局,界面设计代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/content_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_main">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="身高(厘米):" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/height"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="体重(公斤):"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/weight"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="计算体质指数"
android:id="@+id/calButton"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/resText"/>
</LinearLayout>
BMI功能实现
一个Activity控制一个界面,项目的src下存放界面功能实现的代码,需要继承Activity类,首先在类中声明我们要使用的控件变量,要声明两个Edittext用于接收用户身高和体重的输入,设置Button类型的变量代表计算按钮,一个Textview类型变量用于显示结果,这些都是控件类型的变量,功能实现代码要和界面联系起来,首先我们要确定这个Activity要控制和显示的界面是哪一个,通过setContentView()把我们之前设计好的界面和这个Activity绑定起来,同样也要把刚刚定义的控件类型的变量和界面中设计的控件对应起来,这样在代码中实现功能的时候才能同时对界面中的控件进行改变:
private Button calButton;
private EditText heightText,weightText;
private TextView resText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); //加载要显示的界面
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
calButton = (Button)findViewById(R.id.calButton); //变量与控件的绑定
heightText = (EditText) findViewById(R.id.height);
weightText = (EditText) findViewById(R.id.weight);
resText = (TextView) findViewById(R.id.resText);
calButton.setOnClickListener(new ButtonClickListener());
}
对于按钮要设置一个动作监听,当被点击时触发事件,按钮的触发事件写在ButtonClickListener类中,类实现了onclickListener接口,按钮被点击后首先获取用户输入的身高体重数据,判断数据的合法性,然后按照BMI公式计算体质指数,将结果显示到Textview中
使用getText().toString()方法获取EditText中输入的内容,getText()返回的是一个CharSequence的接口,所以要获得输入的字符串需要加上toString(),再将字符串变为数字进行运算,使用Textview.setText()方法设置结果显示:
class ButtonClickListener implements View.OnClickListener{
@Override
public void onClick(View v) {
if(v.getId() == R.id.calButton){
String height = heightText.getText().toString();
String weight = weightText.getText().toString();
double res = 0,heightNum = 0,weightNum = 0;
if(!height.isEmpty()&&!weight.isEmpty()) {
heightNum = Double.parseDouble(height);
weightNum = Double.parseDouble(weight);
res = weightNum/heightNum;
if(res<18.5)
resText.setText(R.string.thin);
else if(res>24.5)
resText.setText(R.string.fat);
else resText.setText(R.string.normal);
}
else Toast.makeText(MainActivity.this,"输入有误!",Toast.LENGTH_SHORT).show();
}
}
}
此时所有的功能已经编写完成,点击运行即可,项目下载:链接: https://pan.baidu.com/s/1nvupS4D 密码: vev2