• 検索結果がありません。

勉強会 資料 Google Developer Group 京都

N/A
N/A
Protected

Academic year: 2018

シェア "勉強会 資料 Google Developer Group 京都"

Copied!
94
0
0

読み込み中.... (全文を見る)

全文

(1)

Study Jams 2016 in Kyoto

Android Development for Beginners Lesson 3

(2)

自己紹介

白山 文彦

Android技術者

株式会社ミクシィ

株式会社リクルートマーケティングパートナーズ

株式会社マナボ

等でAndroidアプリ開発をしてきました

(3)

Javaのメソッド定義

public void doSomething(int arg) {

// do something

}

(4)

public void doSomething(int arg) {

// do something

}

(5)

public void doSomething(int arg) {

// do something

}

Modifiers

(6)

Modifiers

アクセス修飾子

public

private

protected

/* package */

(7)

public void doSomething(int arg) {

// do something

}

Return Type

(8)

Return Type

メソッドの返り値(戻り値)

必須

何も返さない場合は void

プリミティブな型でもオブジェクトタイプ型でも良 い

(9)

ちなみに

(10)

Javaのプリミティブ型

int…32ビット符号付き整数

long…64ビット符号付き整数

float…32ビット符号付き単精度浮動小数点

double…64ビット符号付き倍精度浮動小数点

boolean…真偽値

char…文字型(NOT文字列) ※ byte, short は今日は省略

(11)

Javaのオブジェクト型

String…文字列型

Object型とそのサブクラス…自分で作る任意のクラ ス

(12)

public void doSomething(int arg) {

// do something

}

Method Name

(13)

Method Name

メソッド名

動詞 + 目的語で書くことを推奨

ex) calculateNumbers()

キャメルケースで書くことを推奨

ex) doSomethingReallyGreat()

プリミティブな型でもオブジェクトタイプ型でも良い

(14)

public void doSomething(int arg) {

// do something

}

Parameter List

(15)

Parameter List

引数リスト

引数の型、引数の名前(仮引数)

ex) void setText(String text);

必要ない場合は省略できる

必要ならコンマ区切りで複数定義できる

ex) int calculateNumbers(int x, int y);

(16)

public void doSomething(int arg) {

// do something

}

Method Body

(17)

Method Body

メソッド本体

波括弧 {} で囲む必要あり

任意のJavaの式や文を書くことが出来る

メソッドの戻り値がある場合は最後にそれをreturn する必要がある

(18)

More About...

Defining Methods

https://docs.oracle.com/javase/tutorial/java/ javaOO/methods.html

(19)

Javaのオブジェクト指向プログラミング

(20)

オブジェクト志向とはなにか

(21)

処理の流れが単に上から下へ流れる手続きの塊では なく、意味のある単位で処理をまとめ、それらがメッ セージを送り合うことで協調して動作するようなプ ログラミングパラダイム

現在の主流と言って良い

(22)
(23)

設計図

(Class) (Instance)実際の家

(24)

クラス定義

(25)

public class Bicycle {

private int gear;

public Bicycle(int gear) {

this.gear = gear;

}

public int getGear() {

return gear;

}

}

(26)

public class Bicycle {

private int gear;

public Bicycle(int gear) {

this.gear = gear;

}

public int getGear() {

return gear;

}

}

(27)

public class Bicycle {

private int gear;

public Bicycle(int gear) {

this.gear = gear;

}

public int getGear() {

return gear;

}

}

コンストラクタ

(28)

コンストラクタ

クラス名と同名のメソッドのようなもの

戻り値がない

初期化処理

(29)

クラスの利用方法

(30)

int gear = 1;

Bicycle bike = new Bicycle(gear);

(31)

int gear = 1;

Bicycle bike = new Bicycle(gear);

インスタンス化

(32)

Bicycle myBike = new Bicycle(1);

Bicycle dadsBike = new Bicycle(3);

(33)

Bicycle myBike = new Bicycle(1);

Bicycle dadsBike = new Bicycle(3);

両者は別物

(34)

ファクトリ

(35)

public class Bicycle { private int gear;

private Bicycle(int gear) { this.gear = gear;

}

public static Bicycle newInstance(int gear) { return new Bicycle(gear);

} }

(36)

public class Bicycle { private int gear;

private Bicycle(int gear) { this.gear = gear;

}

public static Bicycle newInstance(int gear) { return new Bicycle(gear);

} }

外からnewできない

staticメソッド

中でnew

(37)

Bicycle bike = Bicycle.newInstance(1);

ファクトリ経由でインスタンス化

(38)

More About...

Classes and Objects

https://docs.oracle.com/javase/tutorial/java/ javaOO/index.html

(39)

継承

(40)

public class Vehicle {

public Vehicle() {

}

public void go() {

// do something

}

}

(41)

public class Car extends Vehicle { public Car() {

}

public void feedFuel(int quantity) { // 省略

}

@Override

public void go() { super.go();

// do some extra }

}

(42)

public class Car extends Vehicle { public Car() {

}

public void feedFuel(int quantity) { // 省略

}

@Override

public void go() { super.go();

// do some extra }

}

継承

オーバーライド

(43)

継承

子クラス extends 親クラス

親の性質を引き継ぐ(プロパティ、メソッド)

@Overrideで上書き可能

(44)

Back to Android!

(45)

public class MainActivity extends AppCompatActivity {


@Override


protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);


setContentView(R.layout.activity_main);

(46)

public class MainActivity extends AppCompatActivity {


@Override


protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);


setContentView(R.layout.activity_main);

(47)

何をしているか?

レイアウトxmlのViewGroup(LinearLayoutとか) から再帰的に子View(ViewGroup)を読み込む

(48)

@Override


protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);


setContentView(R.layout.activity_main);


TextView textView = (TextView) findViewById(R.id.text_view);
 textView.setText("ANOTHER TEXT");

(49)

findViewById(id)

setContentViewで読み込んだXMLの内容から引 数のidのView部品を探してコード上に読み込む

(50)

@Override


protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);


setContentView(R.layout.activity_main);


TextView textView = (TextView) findViewById(R.id.text_view);
 textView.setText("ANOTHER TEXT");

(51)

キャスト

findViewById()はViewTreeの上から下まで読み込 むので具体的に何の型かプログラマが保証しないと いけない

(TextView) findViewById(); のようにして TextView 型にキャストしている

(52)

色々なView部品

(53)

Common Android Views

Cheat Sheet

https://s3-us-west-1.amazonaws.com/udacity- content/PDFs/Common+Android+Views

+Cheat+Sheet+(1).pdf

Androidでよく使うView部品を簡単に一覧で確認 できる

(54)
(55)

EditText

(56)
(57)

EditText

使い方はこれまでのTextViewと同じような感じ

XMLに記述 -> findViewById で探して処理を書く

(58)

<EditText


android:id="@+id/edit_text"


android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:hint="INPUT HERE"


android:inputType="textCapWords" />

(59)

android:hint…入力のヒント

android:inputType="textCapWords"…先頭を大 文字にする(英字入力)

(60)

CheckBox

(61)
(62)

CheckBox

チェックボックス

こちらも同様に、XMLに記述 -> findViewById で 探して処理を書く

チェック時にどんな処理をするとか、チェック状態 を調べるのは後述

(63)

<CheckBox


android:id="@+id/check_box"


android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="Whipped Cream"


android:onClick="onCheckboxClicked"
 android:checked="true" />

(64)

android:onClick…チェック時のイベントハンドラ

android:checked…初期チェック状態

(65)

CheckBox checkBox = (CheckBox) findViewById(R.id.check_box);
 checkBox.setChecked(true);

チェック状態の コードからの変更

(66)

Intent

(67)

Intentとは

他のApp Componentとの連携方法

ビデオでは「ボールをパスするようなもの」

アプリ、機能の再利用、ユーザの選択の自由

(68)

Intent intent = new Intent(Intent.ACTION_SENDTO);
 intent.setData(Uri.parse("mailto:"));


intent.putExtra(Intent.EXTRA_SUBJECT, "Just Java order for " + name);
 intent.putExtra(Intent.EXTRA_TEXT, priceMessage);


startActivity(intent);

(69)

Intent intent = new Intent(Intent.ACTION_SENDTO);
 intent.setData(Uri.parse("mailto:"));


intent.putExtra(Intent.EXTRA_SUBJECT, "Just Java order for " + name);
 intent.putExtra(Intent.EXTRA_TEXT, priceMessage);


startActivity(intent);

何かを送る意図

(70)

Intent intent = new Intent(Intent.ACTION_SENDTO);
 intent.setData(Uri.parse("mailto:"));


intent.putExtra(Intent.EXTRA_SUBJECT, "Just Java order for " + name);
 intent.putExtra(Intent.EXTRA_TEXT, priceMessage);


startActivity(intent);

メール

(71)

Intent intent = new Intent(Intent.ACTION_SENDTO);
 intent.setData(Uri.parse("mailto:"));


intent.putExtra(Intent.EXTRA_SUBJECT, "Just Java order for " + name);
 intent.putExtra(Intent.EXTRA_TEXT, priceMessage);


startActivity(intent);

件名

(72)

Intent intent = new Intent(Intent.ACTION_SENDTO);
 intent.setData(Uri.parse("mailto:"));


intent.putExtra(Intent.EXTRA_SUBJECT, "Just Java order for " + name);
 intent.putExtra(Intent.EXTRA_TEXT, priceMessage);


startActivity(intent);

本文

(73)
(74)

Intentの種類

明示的Intent

連携する先を明示

暗黙的Intent

ACTIONやデータ、カテゴリ等から連携できるコ ンポーネントを任意で選択してもらう

(75)

明示的Intent

(76)

Intent anotherActivityIntent = new Intent(this, AnotherActivity.class);
 startActivity(anotherActivityIntent);

別Activity

(77)

Intent anotherActivityIntent = new Intent(this, AnotherActivity.class);
 startActivity(anotherActivityIntent);

別画面に遷移

(78)

暗黙的Intent

(79)

なんか

http://google.com/ 開けそうな人いますかー?

ぼくら多分開けます!

(80)

アクション

ACTION_VIEW

写真やマップの閲覧など「見る」アクション

ACTION_SEND

データの共有のアクション

(81)

データ

setData()

setType()

setDataAndType()

(82)

カテゴリ

CATEGORY_BROWSABLE

データの表示

CATEGORY_LAUNCHER

起動可能。ランチャに表示される

(83)

More About...

インテントとインテントフィルタ

http://developer.android.com/intl/ja/guide/ components/intents-filters.html

(84)

多言語対応

(85)

Androidでは、テキスト、値、色、画像等々含め、 ベタ書きではなく res 以下にリソースとして定義す ることを推奨している

例えば、各言語向けに別々の文字リソースを用意す ることで、Javaのコードは1行も変更することな

く、日本語ロケールでは日本語を、その他では英語 を、みたいなことができる。

(86)
(87)

res/values/strings.xml

res/values-ja/strings.xml

<resources>


<string name="app_name">StudyJamSample</string>
 <string name="action_settings">Settings</string>
 <string name="button_label">BUTTON</string>


</resources>

<resources>


<string name="app_name">StudyJamSample</string>
 <string name="action_settings">Settings</string>
 <string name="button_label">ボタン</string>


</resources>

(88)

<Button


android:id="@+id/button"


android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_below="@+id/text_view"
 android:text="@string/button_label" />

(89)
(90)
(91)
(92)
(93)
(94)

余談

AndroidStudioで覚えておくべきデバッグTIPS

http://qiita.com/FumihikoSHIROYAMA/items/ e3159103ba2fba07e063

参照

関連したドキュメント

[r]

PLENUMS: For plenum-type structures which use a sealed underfloor space to circulate heated and/or cooled air throughout the structure, apply the dilution at the rate of

2 環境保全の見地からより遮音効果のあるアーチ形、もしくは高さのある遮音効果のある

 本研究では,「IT 勉強会カレンダー」に登録さ れ,2008 年度から 2013 年度の 6 年間に開催され たイベント

東京電力パワーグリッド株式会社 東京都千代田区 東電タウンプランニング株式会社 東京都港区 東京電設サービス株式会社

東電不動産株式会社 東京都台東区 株式会社テプコシステムズ 東京都江東区 東京パワーテクノロジー株式会社 東京都江東区

東京電力パワーグリッド株式会社 東京都千代田区 東電タウンプランニング株式会社 東京都港区 東京電設サービス株式会社

東電不動産株式会社 東京都台東区 株式会社テプコシステムズ 東京都江東区 東京パワーテクノロジー株式会社 東京都江東区