BMI计算器
程序员文章站
2022-07-14 13:14:27
...
最近学安卓,就写了一个BMI计算器玩玩,界面比较丑(不喜勿喷),大家担待一下。
BMI计算公式
体质指数(BMI)=体重(kg)/身高^2(m)
第一步,主界面
主界面布局文件代码(activity_main.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">
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="20dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="@drawable/bg_edittext"
android:ems="10"
android:hint="请输入姓名"
android:inputType="textPersonName"
android:textSize="26sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:textSize="18dp"
android:text="性 别"
android:textColor="#aa000000" />
<RadioGroup
android:id="@+id/sex"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:orientation="horizontal">
<RadioButton
android:id="@+id/bnt_male"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginLeft="10dp"
android:checked="true"
android:text="男" />
<RadioButton
android:id="@+id/female"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginLeft="20dp"
android:text="女" />
</RadioGroup>
<TextView
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginTop="12dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:textSize="18dp"
android:text="年 龄"
android:textColor="#aa000000" />
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="15dp"
android:background="@drawable/bg_edittext"
android:ems="10"
android:hint="请输入年龄"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:inputType="textPersonName"
android:textSize="26sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:textSize="18dp"
android:text="身 高"
android:textColor="#aa000000" />
<EditText
android:id="@+id/editText3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="@drawable/bg_edittext"
android:ems="10"
android:hint="请输入身高(cm)"
android:inputType="textPersonName"
android:textSize="26sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:textSize="18dp"
android:text="体 重"
android:textColor="#aa000000" />
<EditText
android:id="@+id/editText4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="20dp"
android:background="@drawable/bg_edittext"
android:ems="10"
android:hint="请输入体重(kg)"
android:inputType="textPersonName"
android:textSize="26sp" />
<Spinner
android:id="@+id/sp1"
android:layout_width="match_parent"
android:layout_height="40dp"
android:textSize="50dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="20dp">
</Spinner>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:onClick="doSubmit"
android:layout_marginTop="80dp"
android:background="#bebebe"
android:textSize="20dp"
android:text="提 交" />
</LinearLayout>
都是一些很简单的属性,先写一个大体的界面,给他们添加颜色,修改字体等等。
第二步,在MainActivity中实现点击事件并传值给InfoActivity
! ! ! 此处涉及意图(Intent),传值采用JavaBean对象,get和set的方式,当然年龄没有用正则表达式限制,可以随意输多少。
package com.example.bmi;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;
public class MainActivity extends AppCompatActivity {
private EditText et1, et2, et3,et4;
private RadioGroup rg;
private Spinner sp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
inintA();
}
public void inintA() {
final String[] str = this.getResources().getStringArray(R.array.standard);//获取values中String.xml中的字符数组
sp = (Spinner) findViewById(R.id.sp1);
et1 = (EditText) findViewById(R.id.editText1);
et2 = (EditText) findViewById(R.id.editText2);
et3 = (EditText) findViewById(R.id.editText3);
et4 = (EditText) findViewById(R.id.editText4);
rg = (RadioGroup) findViewById(R.id.sex);
ArrayAdapter<String> ada = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, str);
sp.setAdapter(ada);
}
public void doSubmit(View V) {
String sex = null;
for (int i = 0; i < rg.getChildCount(); i++) {
RadioButton b = (RadioButton) rg.getChildAt(i);
if (b.isChecked()) {
sex = b.getText().toString();
}
}
Intent intent = new Intent(this,InfoActivity.class);
Bundle bu = new Bundle();
User u1=new User();
if(et1.getText().toString().trim().length()==0){
et1.setError( "请输入姓名" );
return;
}else{
u1.setName(et1.getText().toString().trim());
}
u1.setGender(sex);
if(et2.getText().toString().trim().length()==0){
et2.setError( "请输入年龄" );
return;
}else {
u1.setAge(et2.getText().toString().trim());
}
if(et3.getText().toString().trim().length()==0){
et3.setError( "请输入身高" );
return;
}else{
u1.setHeight(et3.getText().toString().trim());
}
if(et4.getText().toString().trim().length()==0){
et4.setError( "请输入体重" );
return;
}else{
u1.setWeight(et4.getText().toString().trim());
}
u1.setStandard(sp.getSelectedItem().toString().trim());
bu.putSerializable("Data",u1);
intent.putExtras(bu);
startActivity(intent);
}
}
第三步,接受数据并处理界面
第三步,接受数据并处理界面(activity_info.xml)代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context=".InfoActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:text="BMI详细信息"
android:textSize="28dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="80dp"
android:layout_marginTop="20dp"
android:text="姓 名:"
android:textSize="30dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="80dp"
android:layout_marginTop="20dp"
android:text="性 别:"
android:textSize="30dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="80dp"
android:layout_marginTop="20dp"
android:text="年 龄:"
android:textSize="30dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="80dp"
android:layout_marginTop="20dp"
android:text="身 高:"
android:textSize="30dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="80dp"
android:layout_marginTop="20dp"
android:text="体 重:"
android:textSize="30dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="vertical">
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="20dp"
android:text="data"
android:textSize="30dp" />
<TextView
android:id="@+id/gender"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="20dp"
android:text="data"
android:textSize="30dp" />
<TextView
android:id="@+id/age"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="20dp"
android:text="data"
android:textSize="30dp" />
<TextView
android:id="@+id/height"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="20dp"
android:text="data"
android:textSize="30dp" />
<TextView
android:id="@+id/weight"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="20dp"
android:text="data"
android:textSize="30dp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="80dp"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="80dp"
android:layout_marginTop="20dp"
android:text="BMI值:"
android:textSize="28dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/result_bmi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="Data"
android:textSize="28dp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="80dp"
android:layout_marginTop="20dp"
android:text="身体状态:"
android:textSize="28dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/result_body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="Data"
android:textSize="28dp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
第四步,InfoActivity接收数据并计算
! ! ! 这里参照百度百科BMI,加了三个标准,用Spinner在主界面进行选择,根据不同的标准进行计算。
package com.example.bmi;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
import java.math.BigDecimal;
public class InfoActivity extends AppCompatActivity {
private TextView v1,v2,v3,v4,v5,v6,v7;
private Float height_cm;
private Float height_m;
private Float weight;
private double result,result_last;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_info);
initA();
Intent ins = getIntent();
Bundle bu = ins.getExtras();
User u1=(User)bu.getSerializable("Data");
String name=u1.getName();
String gender=u1.getGender();
String age=u1.getAge();
height_cm=Float.parseFloat(u1.getHeight());
height_m=height_cm/100;
weight=Float.parseFloat(u1.getWeight());
result=weight/ Math.pow(height_m,2);
//保留double小数位为一位,四舍五入
BigDecimal bd = new BigDecimal(result);
result_last = bd.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
String standard= u1.getStandard();
if("中国参考标准".equals( standard )){
ChinaBMI(result_last);
}else if("WHO 标准".equals( standard )){
WhoStandBMI(result_last);
}else{
AsiaBMI(result_last);
}
v1.setText(name);
v2.setText(gender);
v3.setText(age);
v4.setText(Float.toString( height_cm ));
v5.setText(Float.toString( weight ));
v6.setText( Double.toString( result_last ) );
}
public void initA() {
v1 = (TextView) findViewById(R.id.name);
v2 = (TextView) findViewById(R.id.gender);
v3 = (TextView) findViewById(R.id.age);
v4 = (TextView) findViewById(R.id.height);
v5 = (TextView) findViewById(R.id.weight);
v6 = (TextView) findViewById(R.id.result_bmi);
v7=(TextView) findViewById(R.id.result_body);
}
private void ChinaBMI(double BMI) {
if (BMI < 18.5) {
v7.setText( "偏瘦" );
} else if (BMI <= 23.9 && BMI >= 18.5) {
v7.setText( "正常" );
} else if (BMI == 24) {
v7.setText( "超重" );
} else if (BMI <= 26.9 && BMI > 24) {
v7.setText( "偏胖" );
} else if (BMI <= 29.9 && BMI >= 27) {
v7.setText( "肥胖" );
} else if (BMI >= 30) {
v7.setText( "重度肥胖" );
}
}
public void WhoStandBMI(double BMI) {
if (BMI < 18.5) {
v7.setText( "偏瘦" );
} else if (BMI <= 24.9 && BMI >= 18.5) {
v7.setText( "正常" );
} else if (BMI == 25.0) {
v7.setText( "超重" );
} else if (BMI <= 29.9 && BMI > 25) {
v7.setText( "偏胖" );
} else if (BMI <= 34.9 && BMI >=30.0) {
v7.setText( "肥胖" );
} else if (BMI <=39.9&&BMI>= 35) {
v7.setText( "重度肥胖" );
}else if (BMI >= 40.0) {
v7.setText( "极度肥胖" );
}
}
private void AsiaBMI(double BMI) {
if (BMI < 18.5) {
v7.setText( "偏瘦" );
} else if (BMI <= 22.9 && BMI >= 18.5) {
v7.setText( "正常" );
} else if (BMI == 23.0) {
v7.setText( "超重" );
} else if (BMI <= 24.9 && BMI > 23) {
v7.setText( "偏胖" );
} else if (BMI <= 29.9 && BMI >= 25) {
v7.setText( "肥胖" );
} else if (BMI >= 30) {
v7.setText( "重度肥胖" );
}
}
}
计算公式
result=weight/ Math.pow(height_m,2);
项目源码传送门
GitHub:https://github.com/qiaoqiaoismylover/BMI
码云:https://gitee.com/jiang_fangrong/BMI