コンテンツにスキップ

電卓の作成

電卓のDisplay

activity_main.xml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<?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

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
<?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"
            >
        </Button>
        <Button
            android:id="@+id/button8"
            android:text="8"
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            >
        </Button>
        <Button
            android:id="@+id/button9"
            android:text="9"
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            >
        </Button>
        <Button
            android:id="@+id/buttonClear"
            android:text="C"
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            >
        </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"
            >
        </Button>
        <Button
            android:id="@+id/button5"
            android:text="5"
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            >
        </Button>
        <Button
            android:id="@+id/button6"
            android:text="6"
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            >
        </Button>
        <Button
            android:id="@+id/buttonPlus"
            android:text="+"
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            >
        </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"
            >
        </Button>
        <Button
            android:id="@+id/button2"
            android:text="2"
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            >
        </Button>
        <Button
            android:id="@+id/button3"
            android:text="3"
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            >
        </Button>
        <Button
            android:id="@+id/buttonMinus"
            android:text="-"
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            >
        </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"
            >
        </Button>
        <Button
            android:id="@+id/buttonTen"
            android:text="."
            android:textSize="40dip"
            android:layout_width="80dip"
            android:layout_height="80dip"
            >
        </Button>
        <Button
            android:id="@+id/buttonEqual"
            android:text="="
            android:textSize="40dip"
            android:layout_width="160dip"
            android:layout_height="80dip"
            >
        </Button>
    </LinearLayout>

</LinearLayout>

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

MainActivity.java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package com.gclue.myapplication;

import android.app.Activity;
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 Activity 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型に変更する方法は下記の通りです。

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

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

課題2

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

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