大家好今天我們來做一個簡單的程式用來計算BMI值,在程式裡面我們會使用到跳頁面,Bunle傳值等等簡單的功能,那我們就開始吧!
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv_height"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="身高:"
android:textSize="35sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/edt_height"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="請輸入身高"
android:textSize="25sp"
app:layout_constraintStart_toEndOf="@+id/tv_height"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_weight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginTop="36dp"
android:text="體重:"
android:textSize="35sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_height" />
<EditText
android:id="@+id/edt_weight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="28dp"
android:hint="請輸入體重"
android:textSize="25sp"
app:layout_constraintStart_toEndOf="@+id/tv_weight"
app:layout_constraintTop_toBottomOf="@+id/edt_height" />
<Button
android:id="@+id/btn_confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginTop="36dp"
android:text="確認"
android:textSize="30dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_weight" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity:
package com.example.day30_bmi;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
EditText edtHeight,edtWeight;
Button btnConirm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
edtHeight = findViewById(R.id.edt_height);
edtWeight = findViewById(R.id.edt_weight);
btnConirm = findViewById(R.id.btn_confirm);
btnConirm.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_confirm:
Intent intent = new Intent();
intent.setClass(MainActivity.this,ResultActivity.class);
Bundle bundle = new Bundle();
bundle.putFloat("weight",Float.parseFloat(edtWeight.getText().toString()));
bundle.putFloat("height",Float.parseFloat(edtHeight.getText().toString()));
intent.putExtras(bundle);
startActivity(intent);
break;
}
}
}
在MainActivity裡面我們會用到2個EditText和1個Button,EditText是負責輸入身高和體重,當點擊按鈕後Bundle會拿取輸入的身高和體重,所以用getText().toString拿取EditText的值,由於拿取到的是string格式,而我們在下一個畫面會用數字來計算,所以在這裡一並將String轉為Float格式,或許有人會有疑問為什麼是轉為Float而不是int,因為float浮點數會有小數點而int只會是整數值。
activity_result:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ResultActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="您的BMI值為:"
android:textSize="30sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.545"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.386" />
<TextView
android:id="@+id/tv_BMI"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=""
android:gravity="center"
android:textSize="30sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
app:layout_constraintVertical_bias="0.144" />
</androidx.constraintlayout.widget.ConstraintLayout>
ResultActivity:
package com.example.day30_bmi;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class ResultActivity extends AppCompatActivity {
TextView tvBMI;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_result);
tvBMI = findViewById(R.id.tv_BMI);
Bundle bundle = this.getIntent().getExtras();
if (bundle != null){
float weight,height;
weight = bundle.getFloat("weight");
height = bundle.getFloat("height");
calculateBMI(height,weight);
}
}
private void calculateBMI(float height,float weight) {
float ftBMI;
ftBMI = weight/((height/100)*(height/100));
float BMI = (float)(Math.round(ftBMI*10))/10;
tvBMI.setText(String.valueOf(BMI));
}
}
在這一個Activity一開始會用Bundle取得前一個Activity傳過來的值,然後將值傳到calculateBMI副程式來計算BMI值,由於計算出來的BMI值的小數點後面會有很多數字,於是我使用了一個簡單的Math.round(x)來將BMI值的小數點後面只有一個數字,假設原本是17.89554,我先乘10變成178.9554,然後小數點後第一位做四捨五入變成179.0,最後再除10變成17.9就是我們要的值了。
今天就到此結束謝謝大家。
以下是參考到的網址:
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Math/round
https://spicyboyd.blogspot.com/2018/03/appintent-bundleactivity.html