iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 2
0

大家好今天我們來做一個簡單的程式用來計算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


上一篇
[Day 1]前言
下一篇
[Day3]Dialog的基本運用1
系列文
Android開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言