8,014 views
この記事は最終更新から 2627日 が経過しています。
1. やりたいこと
Android Studioを使った初アプリ制作のテーマとして「BMI計算」を選んだ。
入力 → 計算 → 出力
というコンピュータプログラムの基本をシンプルに実装できるからだ。
ちなみに BMI(Body Mass Index)は以下の式で求める。
BMI = (体重) ÷ (身長)2

※自分の備忘録としてのメモ書きなので、入門用には役立たないかも…
2. やってみる
Step 1 : Android Studioプロジェクトの新規作成
Empty Activityで空プロジェクトを作る。

Step 2 : 表示パーツを配置
下図のように 7個のパーツを配置する。
[1] TextView : 身長ラベル
[2] TextView : 体重ラベル
[3] Number : 身長入力欄
[4] Number : 体重入力欄
[5] Button : 計算実行
[6] TextView : BMIラベル
[7] TextView : BMI計算結果

これを XMLで見るとこんな感じ。
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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/textView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:text="身長[cm]"
android:textAppearance="@style/TextAppearance.AppCompat.Display1"
app:layout_constraintEnd_toStartOf="@+id/textView2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:text="体重[kg]"
android:textAppearance="@style/TextAppearance.AppCompat.Display1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/textView"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/input_H_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:ems="10"
android:inputType="number"
android:text="0"
app:layout_constraintEnd_toEndOf="@+id/textView"
app:layout_constraintStart_toStartOf="@+id/textView"
app:layout_constraintTop_toBottomOf="@+id/textView" />
<EditText
android:id="@+id/input_W_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:ems="10"
android:inputType="number"
android:text="0"
app:layout_constraintEnd_toEndOf="@+id/textView2"
app:layout_constraintStart_toStartOf="@+id/textView2"
app:layout_constraintTop_toBottomOf="@+id/textView2" />
<Button
android:id="@+id/button_exec_calc"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="32dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:text="計算実行"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/input_H_view" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:text="BMI"
android:textAppearance="@style/TextAppearance.AppCompat.Display1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button_exec_calc" />
<TextView
android:id="@+id/text_BMI_view"
android:layout_width="wrap_content"
android:layout_height="61dp"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:textAppearance="@style/TextAppearance.AppCompat.Display3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView3" />
</android.support.constraint.ConstraintLayout>
ここまで作ったところで [Run] してみる。

それっぽいのが出てきた!
今回必要な表示パーツはこれだけだ。
Step 3 : [計算実行]ボタン押下時の処理を実装
自動生成された MainActivity.java に、コメント中に★★★を書いた 3箇所を追記する。
package net.dogrow.www.mybmi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private Button execCalcBMI; //★★★ [計算実行]ボタンへの参照
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
execCalcBMI = findViewById(R.id.button_exec_calc); //★★★ ボタンの参照を取得
//★★★ [計算実行]ボタン押下時の処理を追加
execCalcBMI.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Log.d("MainActivity","exec. onClick()"); // ※動作確認用、後で削除
}
});
}
}
[Run]で実行してみる。
[計算実行]ボタンを押下すると、期待通りにログ出力された。

Step 4 : BMI計算処理を実装
上記の Step 3 のプログラムに、コメント中に★★★を書いた 6箇所を追記する。
package net.dogrow.www.mybmi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
private Button execCalcBMI; // [計算実行]ボタンへの参照
private EditText input_H; //★★★ 身長入力欄への参照
private EditText input_W; //★★★ 体重入力欄への参照
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
execCalcBMI = findViewById(R.id.button_exec_calc); // ボタンの参照を取得
input_H = findViewById(R.id.input_H_view); //★★★ 身長入力欄の参照を取得
input_W = findViewById(R.id.input_W_view); //★★★ 体重入力欄の参照を取得
//★★★ [計算実行]ボタン押下時の処理を追加
execCalcBMI.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
//★★★ 身長と体重の入力値を取得
double input_H_double = Double.valueOf(input_H.getText().toString());
double input_W_double = Double.valueOf(input_W.getText().toString());
double BMI = calcBMI(input_H_double, input_W_double);
Log.d("MainActivity","exec. onClick() H=" + input_H_double + ", W=" + input_W_double + ", BMI=" + BMI); // ※動作確認用、後で削除
}
});
}
//★★★ BMI算出
private double calcBMI( double h, double w ){
// BMI = 体重 ÷ (身長 x 身長)
double bmi = 0;
if(w > 0 && h > 0) {
bmi = w / (h * h) * 10000;
}
return bmi;
}
}
[Run]で実行してみる。
[計算実行]ボタンを押下すると、期待通りに BMI算出結果がログ出力された。

Step 5 : BMI算出結果の表示処理を実装
最後の仕上げ!
算出した BMI値を画面上に表示する。
上記の Step 4 のプログラムに、コメント中に★★★を書いた 3箇所を追記する。
package net.dogrow.www.mybmi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private Button execCalcBMI; // [計算実行]ボタンへの参照
private EditText input_H; // 身長入力欄への参照
private EditText input_W; // 体重入力欄への参照
private TextView bmi_result; //★★★ BMI算出結果表示欄への参照
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
execCalcBMI = findViewById(R.id.button_exec_calc); // ボタンの参照を取得
input_H = findViewById(R.id.input_H_view); // 身長入力欄の参照を取得
input_W = findViewById(R.id.input_W_view); // 体重入力欄の参照を取得
bmi_result = findViewById(R.id.text_BMI_view); //★★★ 体重入力欄の参照を取得
// [計算実行]ボタン押下時の処理を追加
execCalcBMI.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
// 身長と体重の入力値を取得
double input_H_double = Double.valueOf(input_H.getText().toString());
double input_W_double = Double.valueOf(input_W.getText().toString());
double BMI = calcBMI(input_H_double, input_W_double);
//★★★ BMI算出結果を表示
String result = String.format("%.1f", BMI);
bmi_result.setText(result);
}
});
}
// BMI算出
private double calcBMI( double h, double w ){
// BMI = 体重 ÷ (身長 x 身長)
double bmi = 0;
if(w > 0 && h > 0) {
bmi = w / (h * h) * 10000;
}
return bmi;
}
}
[Run]で実行してみる。
[計算実行]ボタンを押下すると、期待通りに BMI算出結果が表示された。

3. 所感
・Android Studioを使った初めてのプチアプリ作りができた。
・8年前に Eclipse IDEで Androidアプリを作った時と比べて、そんなに違和感を感じなかった。
・エミュレーターの実行環境は Xeon E3-1271 V3(4core 8thread), メモリ16GB だが、今回は重くは感じなかった。
・自分は iPhoneユーザーなので Androidスマホを持っていない… 実機上で動作確認するために中古で 1台買うか。
・今後は以下をテーマに作って行きたい。
1. 画面遷移があるアプリ
2. OpenGL ESを使うアプリ
3. インターネット通信を使う WEBアプリ
4. カメラを使うアプリ
5. 傾き(加速度センサー)を使うアプリ
6. GoogleMapsを使うアプリ