Como fazer calculadora de IMC em Java para Android
Java

Como fazer calculadora de IMC em Java para Android





Neste tutorial vou descrever como fazer calculadora de IMC em Java para Android e assim você vai poder entender como fazer o cálculo do IMC.

Primeiramente vamos criar um novo projeto vazio(Empty) para fazer a nossa calculadora.

Então com o nosso projeto criado vamos começar a editar os arquivos para que tudo funcione como desejado.

Vamos então editar o arquivo string.xml na pasta res/values para inserir as frases que vamos utilizar no aplicativo.

<resources>
    <string name="app_name">IMC Java</string>
    <string name="title">Calculadora do IMC</string>
    <string name="peso">Peso</string>
    <string name="altura">Altura</string>
    <string name="resp_1">Muito abaixo do peso.</string>
    <string name="resp_2">Abaixo do peso.</string>
    <string name="resp_3">Peso normal.</string>
    <string name="resp_4">Acima do peso.</string>
    <string name="resp_5">Obesidade I.</string>
    <string name="resp_6">Obesidade II(severa).</string>
    <string name="resp_7">Obesidade III(mórbida).</string>
    <string name="calc">Calcular</string>
    <string name="clear">Limpar</string>
    <string name="err">Erro</string>
</resources>

Logo após ter inserido as frases que serão utilizadas vamos agora inserir as cores que vamos utilizar no aplicativo dentro do arquivo colors.xml na pasta res/values.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#6200EE</color>
    <color name="colorPrimaryDark">#3700B3</color>
    <color name="colorAccent">#03DAC5</color>
    <color name="color1">#3896E1</color>
    <color name="color2">#2C42B9</color>
    <color name="color3">#36BE3B</color>
    <color name="color4">#E88787</color>
    <color name="color5">#DA5454</color>
    <color name="color6">#E62F2F</color>
    <color name="color7">#E80000</color>
</resources>




Com a base de textos e cores criadas vamos então começar a fazer o nosso layout da aplicação.

Vamos editar o nosso arquivo de layout activity_main.xml para deixar assim com o seguinte código.

<?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">

    <LinearLayout
        android:id="@+id/layValues"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_margin="16dp"
        app:layout_constraintTop_toTopOf="parent">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="@string/title"
            android:textSize="25sp"
            android:layout_marginBottom="20dp"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/peso"/>
        <EditText
            android:id="@+id/etPeso"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="numberDecimal"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/altura"/>
        <EditText
            android:id="@+id/etAltura"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="numberDecimal"/>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <Button
                android:id="@+id/btnCalc"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/calc"
                android:layout_weight="1"/>
            <Button
                android:id="@+id/btnClear"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/clear"
                android:layout_weight="1"/>
        </LinearLayout>
    </LinearLayout>
    <TextView
        android:id="@+id/tvResp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="25sp"
        android:textStyle="bold"
        android:gravity="center"
        app:layout_constraintTop_toBottomOf="@+id/layValues"
        app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>




Com o nosso layout da aplicação pronto chegou a hora de começar a programar.

Vamos editar então o nosso arquivo MainActivity para fazer com que o nosso aplicativo funcione da melhor forma.

Vamos deixar o código como o seguinte.

package br.com.uware.imcjava;

import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.text.DecimalFormat;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final EditText etPeso = findViewById(R.id.etPeso);
        final EditText etAltura = findViewById(R.id.etAltura);
        Button btnCalc = findViewById(R.id.btnCalc);
        Button btnClear = findViewById(R.id.btnClear);
        final TextView tvResp = findViewById(R.id.tvResp);

        // Botão para calcular
        btnCalc.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try{
                    double imc = calcIMC(Double.parseDouble(etPeso.getText().toString()), Double.parseDouble(etAltura.getText().toString()));
                    imcString(imc, tvResp);
                }
                catch (Exception e) {
                    Log.d("Erro:",e.toString());
                    tvResp.setText(getText(R.string.err));
                }
                hideKeyBoard();
            }
        });
        // Botão limpar
        btnClear.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                etPeso.setText("");
                etAltura.setText("");
                tvResp.setText("");
            }
        });
    }
    // Cálculo do IMC
    private double calcIMC(double peso, double altura){
        double resp = peso/(altura*altura);
        return resp;
    }
    // Obtem cálculo e formula resposta
    private void imcString(double calc,TextView tv){
        DecimalFormat df = new DecimalFormat("#.00");
        String resp = "IMC: "+df.format(calc)+"\n";
        if(calc < 17){
            resp+= getText(R.string.resp_1);
            tv.setTextColor(getResources().getColor(R.color.color1));
        }
        else if(calc >= 17 && calc < 18.5){
            resp+= getText(R.string.resp_2);
            tv.setTextColor(getResources().getColor(R.color.color2));
        }
        else if(calc >= 18.5 && calc < 25){
            resp+= getText(R.string.resp_3);
            tv.setTextColor(getResources().getColor(R.color.color3));
        }
        else if(calc >= 25 && calc < 30){
            resp+= getText(R.string.resp_4);
            tv.setTextColor(getResources().getColor(R.color.color4));
        }
        else if(calc >= 30 && calc < 35){
            resp+= getText(R.string.resp_5);
            tv.setTextColor(getResources().getColor(R.color.color5));
        }
        else if(calc >= 35 && calc < 40){
            resp+= getText(R.string.resp_6);
            tv.setTextColor(getResources().getColor(R.color.color6));
        }
        else {
            resp+= getText(R.string.resp_7);
            tv.setTextColor(getResources().getColor(R.color.color7));
        }
        tv.setText(resp);
    }
    // Esconde o teclado
    public void hideKeyBoard() {
        View view = this.getCurrentFocus();
        if(view!= null){
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }
}

Agora é só compilar e executar o projeto para testar como tudo esta funcionando.





Para fins didáticos resolvi estender um pouco mais este nosso tutorial.

Resolvi então utilizar do mesmo código de layout da aplicação escrita em Java e escrevi o mesmo em Kotlin para que possamos ver a diferença dos dois códigos.

Vamos agora ver como vai ficar a nossa MainActivity escrita em kotlin.

package br.com.uware.imckotlin

import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.view.inputmethod.InputMethodManager
import android.widget.TextView
import androidx.core.content.ContextCompat
import kotlinx.android.synthetic.main.activity_main.*
import java.lang.Exception
import java.text.DecimalFormat

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Botão para calcular
        btnCalc.setOnClickListener {
            try {
                imcString(calcIMC(etPeso.text.toString().toDouble(), etAltura.text.toString().toDouble()), tvResp)
            } catch (e: Exception){
                Log.d("Erro: ", e.toString())
                tvResp.text = getString(R.string.err)
            }
            it.hideKeyboard()
        }
        // Botão limpar
        btnClear.setOnClickListener {
            etPeso.setText("")
            etAltura.setText("")
            tvResp.text = ""
        }
    }
    // Cálculo do IMC
    private fun calcIMC(peso: Double,altura: Double): Double {
        return peso/(altura*altura)
    }
    // Obtem cálculo e formula resposta
    private fun imcString(calc: Double,tv: TextView){
        val df = DecimalFormat("#.00")
        var str = "IMC: "+df.format(calc)+"\n"
        if(calc < 17){
            str += getString(R.string.resp_1)
            tv.setTextColor(ContextCompat.getColor(this, R.color.color1))
        }
        else if(calc >= 17 && calc < 18.5){
            str += getString(R.string.resp_2)
            tv.setTextColor(ContextCompat.getColor(this, R.color.color2))
        }
        else if(calc >= 18.5 && calc < 25){
            str += getString(R.string.resp_3)
            tv.setTextColor(ContextCompat.getColor(this, R.color.color3))
        }
        else if(calc >= 25 && calc < 30){
            str += getString(R.string.resp_4)
            tv.setTextColor(ContextCompat.getColor(this, R.color.color4))
        }
        else if(calc >= 30 && calc < 35){
            str += getString(R.string.resp_5)
            tv.setTextColor(ContextCompat.getColor(this, R.color.color5))
        }
        else if(calc >= 35 && calc < 40){
            str += getString(R.string.resp_6)
            tv.setTextColor(ContextCompat.getColor(this, R.color.color6))
        }
        else {
            str += getString(R.string.resp_7)
            tv.setTextColor(ContextCompat.getColor(this, R.color.color7))
        }
        tv.text = str
    }
    // Esconde o teclado
    fun View.hideKeyboard() {
        val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        imm.hideSoftInputFromWindow(windowToken, 0)
    }
}

Enfim espero poder ter ajudado com mais este tutorial de como fazer calculadora de IMC em Java para Android e que você tenha visto a diferença entre as duas linguagens de programação Java e Kotlin utilizando do mesmo código xml.

Veja e siga nosso canal no Youtube.

Fonte: http://www.calculoimc.com.br/tabela-de-imc/





Rodrigo Leutz
Desenvolvedor Web e Android ( Kotlin e Java )
https://uware.com.br