電卓の作成

電卓のDisplay

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="1000"
        android:textSize="60dip"
        android:textColor="#f39800"
        android:gravity="right"
        android:background="#999999"
        />

</LinearLayout>

キー

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView
        android:id="@+id/display"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text=""
        android:textSize="60dip"
        android:textColor="#f39800"
        android:gravity="right"
        android:background="#999999"
        />
    <LinearLayout
        android:gravity="center_horizontal"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        >
        <Button
            android:id="@+id/button7"
            android:text="7"
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            android:background="@drawable/button_anim"
            >
        </Button>
        <Button
            android:id="@+id/button8"
            android:text="8"
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            android:background="@drawable/button_anim"
            >
        </Button>
        <Button
            android:id="@+id/button9"
            android:text="9"
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            android:background="@drawable/button_anim"
            >
        </Button>
        <Button
            android:id="@+id/buttonClear"
            android:text="C"
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            android:background="@drawable/button_anim"
            >
        </Button>
    </LinearLayout>
    <LinearLayout
        android:gravity="center_horizontal"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        >
        <Button
            android:id="@+id/button4"
            android:text="4"
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            android:background="@drawable/button_anim"
            >
        </Button>
        <Button
            android:id="@+id/button5"
            android:text="5"
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            android:background="@drawable/button_anim"
            >
        </Button>
        <Button
            android:id="@+id/button6"
            android:text="6"
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            android:background="@drawable/button_anim"
            >
        </Button>
        <Button
            android:id="@+id/buttonPlus"
            android:text="+"
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            android:background="@drawable/button_anim"
            >
        </Button>
    </LinearLayout>
    <LinearLayout
        android:gravity="center_horizontal"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        >
        <Button
            android:id="@+id/button1"
            android:text="1"
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            android:background="@drawable/button_anim"
            >
        </Button>
        <Button
            android:id="@+id/button2"
            android:text="2"
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            android:background="@drawable/button_anim"
            >
        </Button>
        <Button
            android:id="@+id/button3"
            android:text="3"
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            android:background="@drawable/button_anim"
            >
        </Button>
        <Button
            android:id="@+id/buttonMinus"
            android:text="-"
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            android:background="@drawable/button_anim"
            >
        </Button>
    </LinearLayout>
    <LinearLayout
        android:gravity="center_horizontal"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        >
        <Button
            android:id="@+id/button0"
            android:text="0"
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            android:background="@drawable/button_anim"
            >
        </Button>
        <Button
            android:id="@+id/buttonTen"
            android:text="."
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            android:background="@drawable/button_anim"
            >
        </Button>
        <Button
            android:id="@+id/buttonEqual"
            android:text="="
            android:textSize="40dip"
            android:layout_width="160dip"
            android:layout_height="80dip"
            android:background="@drawable/button_anim"
            >
        </Button>
    </LinearLayout>

</LinearLayout>

クリアのみが有効なサンプル

MainActivity.java

package com.example.sasakiakira.uisample2;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    /** Buttonの配列. */
    private Button mButton[];

    /** ButtonのIdの配列. */
    int mId[] = {R.id.button0,R.id.button1,R.id.button2,R.id.button3,
                R.id.button4,R.id.button5,R.id.button6,R.id.button7,
                R.id.button8,R.id.button9,R.id.buttonPlus,R.id.buttonMinus,
                R.id.buttonEqual,R.id.buttonTen, R.id.buttonClear
    };

    /** 配列の場所を定数化. */
    private final int KEY_0 = 0;
    private final int KEY_1 = 1;
    private final int KEY_2 = 2;
    private final int KEY_3 = 3;
    private final int KEY_4 = 4;
    private final int KEY_5 = 5;
    private final int KEY_6 = 6;
    private final int KEY_7 = 7;
    private final int KEY_8 = 8;
    private final int KEY_9 = 9;
    private final int KEY_PLUS = 10;
    private final int KEY_MINUS = 11;
    private final int KEY_EQUAL = 12;
    private final int KEY_TEN = 13;
    private final int KEY_CLEAR = 14;

    /** 電卓のディスプレイ. */
    private TextView mTextView;

    /** 合計値. */
    private int total;

    /** 1つ前の状態を保持. */
    private int beforeStatus;

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

        // TextView
        mTextView = (TextView) findViewById(R.id.display);

        // Button
        mButton = new Button[mId.length];

        // Buttonの取り込みとイベントのはりつけ
        for(int i = 0; i < mId.length; i++){
            // buttonを取り込む
            mButton[i] = (Button)findViewById(mId[i]);
            // buttonのイベント処理
            mButton[i].setOnClickListener(this);
        }

    }

    @Override
    public void onClick(View v) {
        // 押されたボタンがどのボタンかを判定
        for (int i = 0; i < mId.length; i++) {
            if (v.equals(mButton[i])) {
                // CLEAR
                if (i == KEY_CLEAR) {
                    mTextView.setText("");
                    total = 0;
                    beforeStatus = KEY_CLEAR;
                }
                // 数字
                else if (i < 10) {
                    String nowValue = mTextView.getText().toString();
                    nowValue = nowValue + i;
                    mTextView.setText(nowValue);
                    beforeStatus = i;
                }
                break;
            }
        }
    }
}

課題1

+-.%を実装しましょう。

TextViewで取得した文字列(String)をInt型に変更する方法は下記の通りです。

String nowValue = mTextView.getText().toString();
int value = Integer.parseInt(nowValue);

これでStringをIntに変換する事ができます。

課題2

おかしな挙動や、おかしな操作をした場合の対処を入れましょう。

例)

  • 1,+とボタンを押した後、=が押されたら?
  • 何も入力されていないのに+や-や=が押されたら?
  • 0だけ入力されている状態で他の数字キーが押されたら?
  • 100桁の数字が入力されたら?
  • etc...