電卓アプリ@京都
BY ANDROID STUDIO
2015年1月31日
講師プロフィール
名前:森 昭暢(もり あきのぶ)
年齢:23歳
血液型:O型
星座:さそり座
出身:大阪
趣味:プログラミング、音楽、語学、、、
好きな言葉:好きなものこそ上手なれ
完成図
ボタン19個
足し算
引き算
割り算
掛け算
除算
TextView
Button
制作の流れ
• プログラミング
– 変数の用意
– クリックイベント
– 計算機能
• レイアウト作成
– リニアレイアウト
– テーブルレイアウト
– テキストビュー
– ボタン
その前に・・・
Androidとは
Google社が開発する、スマートフォン用に普及しているOS
モバイルOSのシェア 2014年12月Net Applications調べ
http://news.mynavi.jp/news/2015/01/06/211/
その前に・・・
バージョンのシェア
JellyBean(46.0%↓)が最多、次いでKitKat(39.1%↑)
2015年1月Android Developer調べ
https://developer.android.com/about/dashboards/index.html
Version Codename API Distribution
2.2 Froyo 8 0.40%
2.3.3 - Gingerbread 10 7.80%
2.3.7
4.0.3 -
Ice Cream
Sandwich
15 6.70%
4.0.4
4.1.x Jelly Bean 16 19.20%
4.2.x 17 20.30%
4.3 18 6.50%
4.4 KitKat 19 39.10%
その前に・・・
Android Studioとは
Google社が開発する、Androidアプリ開発環境
・Google純正
・見た目がスッキリしている。
・より便利な機能がサポートされていく?
新規プロジェクト作成
新規プロジェクト作成
新規プロジェクト作成
新規プロジェクト作成
新規プロジェクト作成
新規プロジェクト作成
SDKマネージャからAVDをインストール
SDKマネージャからAVDをインストール
ツールバー>緑の再生ボタンから
・ ・ ・ ・
・
・
・
・
・
レイアウト作成
構造
LinearLayout
TableRow
TextView
TableLayout
Button
レイアウト作成
LinearLayoutとは?
縦(Vertical)または横(Horizontal)方向
にビューを配置してゆくレイアウト
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.andr
oid.com/apk/res/android"
xmlns:tools="http://schemas.android.
com/tools"
android:layout_width="fill_parent“
android:layout_height="fill_parent"
android:orientation="vertical"
tools:context=".MainActivity">
</LinearLayout>
activity_main.xml
レイアウト作成
TextViewを追加
fill_parent 画面いっぱいに表示
match_parent 画面いっぱいに表示
wrap_content 幅を自動調節
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="100dp"
android:gravity="right|center_vertical"
android:textSize="40sp“
/>
<TableLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
</TableLayout>
activity_main.xml
TableLayoutとは?
テーブル・格子状にウィジェットを配置
できるレイアウト。
TableRow(行)に各ウィジェットを追加。
今回は5行追加し、ボタンを配置してゆ
く
レイアウト作成
TableRowを追加
1行の中に4つボタンを配置して、
ワンセット
電卓は計5行追加します。
<TableRow
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_weight="1">
</TableRow>
activity_main.xml
レイアウト作成
Buttonを追加
1行の中に4つボタンを配置して、
ワンセット
電卓は計5行追加します。
<Button
android:id="@+id/ac"
android:layout_weight="1"
android:layout_width="match_parent“
android:layout_height="match_parent"
android:layout_gravity="center"
android:soundEffectsEnabled="true“
android:textSize="24sp"
android:text="AC" />
<Button
android:id="@+id/or"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:soundEffectsEnabled="true"
android:textSize="24sp"
android:text="+/-" />
<Button
android:id="@+id/mod"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:soundEffectsEnabled="true"
android:textSize="24sp"
android:text="%" />
<Button
android:id="@+id/div"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:soundEffectsEnabled="true"
android:textSize="24sp"
android:text="÷" />
activity_main.xml
レイアウト作成
Button入りのTableRow
をコピー&ペーストで5行
追加
ボタンのテキストとIDを書き換えて
ください。
ID一覧
AC→ac
+/- → or
% → mod
÷ → div
0 → num0
× → multi
- → minus
+ → plus
. →point
= → equal
<TableRow
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_weight="1">
<Button />×4
</TableRow>×5
activity_main.xml
レイアウト作成
「=」を2列分に表示させ
る
android:layout_spanと
android:layout_weightを2に指定
<!-- テーブル最終行 
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:id="@+id/num0"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_gravity="center"
android:soundEffectsEnabled="true"
android:textSize="24sp"
android:text="0" />
<Button
android:id="@+id/point"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_gravity="center"
android:soundEffectsEnabled="true"
android:textSize="24sp"
android:text="." />
<Button
android:id="@+id/equal"
android:layout_span="2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="2"
android:soundEffectsEnabled="true"
android:textSize="24sp"
android:text="=" />
</TableRow>
activity_main.xml
エミュレータで確認
プログラミング
変数の用意
MainActivity.java
public class MainActivity extends ActionBarActivity{
int[] resource = {R.id.num1, R.id.num2, R.id.num3, R.id.num4, R.id.num5,
R.id.num6,R.id.num7, R.id.num8, R.id.num9, R.id.num0, R.id.ac, R.id.or,
R.id.plus, R.id.minus, R.id.multi, R.id.div, R.id.mod, R.id.point, R.id.equal
}; //ボタンのリソース
TextView display; //電卓の画面
Button button[] = new Button[resource.length]; //各ボタン
String first = "0"; //始めの数
String second = "0"; //2番目の数
String calc = ""; //演算子
int answer = 0; //答え
}
プログラミング
• ボタンにクリックイベントを設定
MainActivity.java
public class MainActivity extends ActionBarActivity implements
OnClickListener{
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
display = (TextView)findViewById(R.id.textView);
for(int i = 0; i < resource.length; i++){
button[i] = (Button)findViewById(resource[i]);
button[i].setOnClickListener(this);
}
}
プログラミング
• 計算機能の実装
MainActivity.java
@Override
public void onClick(View v){
switch(v.getId()){
case R.id.num0: //「0」を押したとき
if(display.getText().toString().equals(“+”) ||
display.getText().toString().equals("-") ||
display.getText().toString().equals("÷") ||
display.getText().toString().equals("×") ||
display.getText().toString().equals("%")){
display.setText(“0”); //画面に「0」を表示
}else{
display.append(“0”); //画面に「0」を追加
}
break;
case R.id.num1:
・・・
これを0~9まで追加してください
プログラミング
• 演算子が押された時
MainActivity.java
//続き
case R.id.plus:
calc = "+";
first = display.getText().toString();
display.setText("+");
break;
case R.id.minus:
calc = "-";
first = display.getText().toString();
display.setText("-");
break;
case R.id.multi:
calc = "×";
first = display.getText().toString();
display.setText("×");
break;
case R.id.div:
calc = "÷";
first = display.getText().toString();
display.setText("÷");
break;
case R.id.mod:
calc = "%";
first = display.getText().toString();
display.setText("%");
break;
プログラミング
• AC、+/-、小数点が押された時
MainActivity.java
//続き
case R.id.ac:
first = null;
second = null;
display.setText("");
break;
case R.id.or:
if(display.getText().toString().indexOf("-") == -1) {
String w = display.getText().toString();
w = "-" + w;
display.setText(w);
}else{
String w = display.getText().toString();
int e = Math.abs(Integer.parseInt(w));
w = String.valueOf(e);
display.setText(w);
}
break;
case R.id.point:
if(display.getText().toString().indexOf(".") == -1) {
display.append(".");
}
break;
プログラミング
• =が押された時
MainActivity.java
case R.id.equal:
if(calc == "+") {
second = display.getText().toString();
answer = Double.parseDouble(first) + Double.parseDouble(second);
display.setText(String.valueOf(answer));
}else if(calc == "-"){
second = display.getText().toString();
answer = Double.parseDouble(first) - Double.parseDouble(second);
display.setText(String.valueOf(answer));
}else if(calc == "×"){
second = display.getText().toString();
answer = Double.parseDouble(first) * Double.parseDouble(second);
display.setText(String.valueOf(answer));
}else if(calc == "÷"){
second = display.getText().toString();
answer = Double.parseDouble(first) / Double.parseDouble(second);
display.setText(String.valueOf(answer));
}else if(calc == "%"){
second = display.getText().toString();
answer = Double.parseDouble(first) % Double.parseDouble(second);
display.setText(String.valueOf(answer));
}
break;
default:
break;
エミュレータで確認
まとめ
AndroidStudioのトレンドやAndroidOSのシェアの行方に注目。
正しい(どんな横幅のデバイスでも正しく表示される)レイアウトを作成する。
レイアウトは動的(プログラム)にも静的(XML)でも作れるように。
想定外の入力にも対応できるように例外処理を追加する。

【京都勉強会】Android入門編1月31日