Weitere ähnliche Inhalte
Ähnlich wie Android Lecture #03 @PRO&BSC Inc. (20)
Android Lecture #03 @PRO&BSC Inc.
- 4. ショットカットで操作してみましょう
操作 ショートカット
画面の回転 (前へ) Ctrl + F11
画面の回転(次へ) Ctrl + F12
ネットワーク切替 F8
フルスクリーンモード Alt + Enter
トラックボール F6
トラックボール
Delete
(キー押下中)
4
- 8. ライフサイクル
モデル
• Android端末にど
のような操作を行う
と、どのような経路
をたどるか?を常に
意識しましょう!
8
- 9. package jp.probsc.test; public void onPause() {
super.onPause();
import android.app.Activity;
Log.i("trace", “5. onPause");
import android.os.Bundle;
}
import android.util.Log;
public void onStop() {
public class MainActivity
super.onStop();
extends Activity {
Log.i("trace", “6. onStop");
public void onCreate(Bundle state) { }
super.onCreate(state);
public void onDestroy() {
Log.i("trace", “1. onCreate");
super.onDestroy();
}
Log.i("trace", “7. onDestroy");
public void onStart() { }
super.onStart();
public void onRestoreInstanceState(Bundle state) {
Log.i("trace", “2. onStart");
super.onRestoreInstanceState(state);
}
Log.i("trace", “8. onRestoreInstanceState");
public void onRestart() { }
super.onRestart();
public void onSaveInstanceState(Bundle state) {
Log.i("trace", “3. onRestart");
super.onSaveInstanceState(state);
}
Log.i("trace", “9. onSaveInstanceState");
public void onResume() { }
super.onResume();
public void onUserLeaveHint() {
Log.i("trace", “4. onResume");
super.onUserLeaveHint();
}
Log.i("trace", “10. onUserLeaveHint");
}
}
9
- 10. ログ出力と基に表を埋めてみましょう
(1) 起動 (2) Back キー (3) Home キー
1. onCreate
2. onStart
4. onResume
(4) 回転 (5) 着呼 (6) (3) 後、アイコンタップ
(7) 履歴から他アプリ起動 (8) 小メモリにてHomeキー (9) (8) 後、アイコンタップ
10
- 11. 画面回転に対応するには?
• 縦、横のそれぞれでレイアウトファイルを分ける
画面の大きさによって分けるには「layout-hdpi /
layout-mdpi / layout-ldpi」などとします。
具体的な解像度に対応するには「layout-480x320
/ layout-854x480」などとします。
• 画面向きを固定する
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity" android:label="@string/app_name"
android:screenOrientation="portrait">
縦向固定
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity" android:label="@string/app_name"
android:screenOrientation="landscape">
横向固定 11
- 12. 画面固定して destory 呼ばれなくするには?
... (省略) ...
AndroidManifest.xml
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity" android:label="@string/app_name"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden">
... (省略) ...
... (省略) ...
MainActivity.java
public class MainActivity extends Activity {
... (省略) ...
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.i(“trace”, “onConfigurationChanged called");
}
}
... (省略) ...
12
- 14. ← こんな Toast が表示され
郵便番号検索 れば成功です。
API の利用
「zip.php?zn=9800014」の部分を変更し
て結果が変わるか確かめてみましょう。
HttpURLConnection http = null; String city =
InputStream in = null; lineStr.substring(
try { lineStr.indexOf("city=¥"") + 6,
// HTTP GETにてデータを取得 lineStr.indexOf(
URL url = new URL( "¥" />¥n<value address="));
"http://zip.cgis.biz/xml/zip.php?zn=9800014"); Toast.makeText(this, city,
http = Toast.LENGTH_LONG).show();
(HttpURLConnection)url.openConnection(); }
http.setRequestMethod("GET"); }
http.connect(); }
in = http.getInputStream(); catch (Exception ex) {
}
// XML の city 属性の値を取得 finally {
byte[] line = new byte[1024]; try {
while (true) { if (http != null) http.disconnect();
int size = in.read(line); if (in != null) in.close();
if (size <= 0) break; }
catch (Exception e) {
String lineStr = new String(line); }
if (lineStr.contains("city=")) { }
ネットにアクセスするため、AndroidManifest.xmlに下記パーミッションを追加しましょう
<uses-permission android:name="android.permission.INTERNET" /> 14
- 15. 非同期処理 protected Long doInBackground(
String... params) {
AsyncTask for (int i = 0; i < 10; i++) {
if (isCancelled()) break;
... (省略) ... SystemClock.sleep(1000);
publishProgress((i + 1) * 10);
public void onCreate(Bundle state) { }
super.onCreate(state); return 0L;
new MyAsyncTask().execute(""); }
} protected void onProgressUpdate(
Integer... values) {
public class MyAsyncTask extends dialog.setProgress(values[0]);
AsyncTask<String, Integer, Long> { }
ProgressDialog dialog; protected void onCancelled() {
protected void onPreExecute() { dialog.dismiss();
dialog = new ProgressDialog(MainActivity.this); new AlertDialog.Builder(MainActivity.this)
dialog.setTitle("Loading data..."); .setMessage("キャンセル")
dialog.setProgressStyle( .setPositiveButton("OK", null).create().show();
ProgressDialog.STYLE_HORIZONTAL); }
dialog.setOnCancelListener(
new OnCancelListener() { protected void onPostExecute(Long result) {
public void onCancel(DialogInterface arg) { dialog.dismiss();
MyAsyncTask.this.cancel(true);
new AlertDialog.Builder(MainActivity.this)
}
.setMessage("完了!")
});
.setPositiveButton("OK", null).create().show();
dialog.setMax(100);
}
dialog.setProgress(0);
}
dialog.show();
} ... (省略) ...
15
- 16. 本日の課題
• じゃんけんゲームの改善
– 画面回転しても影響がないようにライフサイクルの観
点から修正しましょう
– メモリ領域が足りなくなっても破棄されないように修正
しましょう
• EditTextに郵便番号を入力し、Buttonを押下
にて「AsyncTask + 郵便番号検索API」を起
動し、町の名前をTextViewに表示しましょう
16