Download PPT2 - WordPress.com

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
IT411 Mobile Programming
Topics in This Section
วิธก
ี ารสร ้าง Android projects

• โครงสร ้าง program

• การสร ้าง layout ด ้วย Java-based

• การสร ้าง layout ด ้วย XML-based

• การสร ้าง layout ด ้วย Eclipse ADT visual layout editor

• การสร ้าง layout แบบ Hybrid layout

• Project structure summary
General Structure
(Common to All Approaches)








package com.companyname.projectname;
import android.app.Activity;
import android.os.Bundle;
import android.widget.SomeLayoutOrView;
public class SomeName extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SomeLayoutOrView view = createOrGetView();

...
setContentView(R.layout.main);
}





...
}
Three Main Approaches








• Java-based
– เป็ นการสร ้าง layout ด ้วยภาษา Java - เหมือน Swing programming.
• XML-based
้
– ใชไฟล์
XML ในการระบุ Strings และ layout window
• Hybrid
้
–ใชไฟล์
XML file ในการระบุ Strings และ layout ใชค้ าสงั่ Java ในการ
ควบคุมเหตุการณ์ทเี่ กิดขึน
้ บนหน ้าจอ
• ตัวอย่างการทางาน
– เมือ
่ กดปุ่ ม Button เมือ
่ กดปุ่ ม “Show Greeting” ระบบจะแสดงข ้อความ
Hello from Android ผ่านทางหน ้าจอ
Java-Based Approach: Template




















public class SomeName extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String message = "...";
LinearLayout window = new LinearLayout(this);
window.setVariousAttributes(…);
Button b = new Button(this);
b.setText("Button Label");
b.setOnClickListener(new SomeHandler());
window.addView(b);
...
setContentView(window);
}
private class SomeHandler implements OnClickListener {
@Override
public void onClick(View clickedButton) {
doSomething(...);
}
}}
XML-Based Approach: Template
Java










public class SomeClass extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void handlerMethod(View clickedButton) {
String someName = getString(R.string.some_name);
doSomethingWith(someName);
}}
XML
res/values/strings.xml
res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="some_name">…</string>
…
</resources>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout …>
<TextView … />
<Button … android:onClick="handlerMethod" />
</LinearLayout>
Hybrid Approach: Template

• Java
public class SomeClass extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button b = (Button)findViewById(R.id.button_id);
b.setOnClickListener(new SomeHandler());
}
private class SomeHandler implements OnClickListener {
@Override
public void onClick(View clickedButton) {
doSomething(...);
}
}}
• XML

– สร ้างหน ้าจอ กาหนดค่า ID

– สามารถกาหนด android:onClick ลงใน file xml เพือ
่ ตรวจสอบเหตุการณ์การเลือกวัตถุบนหน ้าจอ















SAMPLE: Java-Based Layout


Approach
้
– ใชจาวา
ระบุข ้อความ layout และควบคุมเหตุการณ์ตา่ ง ๆ ทีเ่ กิดขึน
้ กับ
อุปกรณ์

• Advantages

– คาสงั่ คล ้ายกับ Swing และ AWT ของจาวา

– เหมาะกับ layouts ทีต
่ ้องเปลีย
่ นรูปแบบการทางานไม่ตายตัว dynamic

• Disadvantages

– แก ้ไขยาก

– ไม่ทางานในลักษณะ I18N

• เป็ นทีย
่ อมรับใน App Store เนือ
่ งจากไม่มข
ี ้อกาหนดการทางานในสว่ นนี้
Code (Main Method)



public class SayHelloJava extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String appName = "SayHello Application";
String windowText = "Press the button below to receive " + "a friendly greeting
from Android.";




String buttonLabel = "Show Greeting";

LinearLayout mainWindow = new LinearLayout(this);

mainWindow.setOrientation(LinearLayout.VERTICAL);
setTitle(appName);
TextView label = new TextView(this);
label.setText(windowText);



mainWindow.addView(label);
Button greetingButton = new Button(this);
greetingButton.setText(buttonLabel);



greetingButton.setOnClickListener(new Toaster());
mainWindow.addView(greetingButton);
setContentView(mainWindow);




}
Code (Event Handler Method)











private class Toaster implements OnClickListener {
@Override
public void onClick(View clickedButton) {
String greetingText = "Hello from Android!";
Toast tempMessage =
Toast.makeText(SayHelloJava.this,
greetingText,
Toast.LENGTH_SHORT);
tempMessage.show();
}
}
SAMPLE: XML-Based Layout











• Approach
– ใช ้ XML ระบุข ้อความ layout และควบคุมเหตุการณ์ตา่ ง ๆ ทีเ่ กิดขึน
้ กับ
อุปกรณ์
• ระบุ layout และการควบคุมใน res/layout/main.xml
• ระบุ Strings ใน res/values/strings.xml
• Advantages
– แก ้ไขง่าย
– สามารถใช ้ layout editor ของ Eclipse ในการสร ้าง
– Standard/recommended
(along with hybrid)
• Disadvantages
– ไม่สามารถจัดการ dynamic layouts
More Details













res/layout/main.xml
– การระบค่าใน xml เริม
่ จากการกาหนด layout
• <LinearLayout …>Define controls</LinearLayout>
– การอ ้างถึงข ้อมูล String (จาก strings.xml) ใช ้ @string/string_name
– การจัดการเหตุการณ์ทเี่ กิดขึน
้ บนหน ้าจอ (event handler) ใช ้ android:onClick
• res/values/strings.xml
– พืน
้ ทีใ่ นการระบุข ้อความ
• Java code
– ใชอ้ ้าง layout - R.layout.main
– ใชอ้ ้าง strings - getString(R.string.string_name)
– ใชอ้ ้าง controls - findViewById(R.id.some_id)
• More info
– http://developer.android.com/guide/topics/ui/
Project Layout
Code (res/layout/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="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/window_text"/>
<Button
android:text="@string/button_label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showToast"/>
</LinearLayout>
Code (res/values/strings.xml)










<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Say Hello Application</string>
<string name="window_text">
Press the button below to receive
a friendly greeting from Android.
</string>
<string name="button_label">Show Greeting</string>
<string name="greeting_text">Hello from Android!</string>
</resources>
Code (Java)














public class SayHelloXml extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void showToast(View clickedButton) {
String greetingText = getString(R.string.greeting_text);
Toast tempMessage =
Toast.makeText(this, greetingText,
Toast.LENGTH_SHORT);
tempMessage.show();
}
}
Eclipse ADT Visual Layout Editor

• Invoking

– เป็ นการสร ้าง main.xml โดยการลากวาง

• Features

– สามารถควบคุมวัตถุให ้วางตามนาตัง้ แนวนอนได ้ง่าย layout attributes
ี รรบนหน ้าจอ
– สามารถเพิม
่ เติมสส

ั เจน
– เห็นภาพทีไ่ ด ้ชด

• Warning

– อย่างไรก็ตามการฝึ กหัดเบือ
้ งต ้นควรรู ้เรือ
่ งของการใช ้ XML เป็ นสาคัญ

Eclipse Visual Layout Editor
Hybrid Layout






• Approach
–ใช ้ XML ระบุข ้อความ และ layout
– ใช ้ Java ควบคุมเหตุการณ์ตา่ ง ๆ ทีเ่ กิดขึน
้ กับอุปกรณ์
• Advantages
– ใช ้ XML ตามความเหมาะสม
– ทาให ้โปรแกรมเมอร์สามารถมองเห็นวิธก
ี ารจัดการกับเหตุการณ์ตา่ ง ๆ ได ้
ง่ายขึน
้

• Disadvantages

– ไม่สามารถจัดการ dynamic layouts
Code (res/layout/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="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/window_text"/>
<Button
android:id="@+id/greeting_button"
android:text="@string/button_label"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
Code (res/values/strings.xml)










<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Say Hello Application</string>
<string name="window_text">
Press the button below to receive
a friendly greeting from Android.
</string>
<string name="button_label">Show Greeting</string>
<string name="greeting_text">Hello from Android!</string>
</resources>
Code (Java)




















public class SayHelloHybrid extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button greetingButton =
(Button)findViewById(R.id.greeting_button);
greetingButton.setOnClickListener(new Toaster());
}
private class Toaster implements OnClickListener {
@Override
public void onClick(View clickedButton) {
String greetingText = getString(R.string.greeting_text);
Toast tempMessage =
Toast.makeText(SayHelloHybrid.this,
greetingText,
Toast.LENGTH_SHORT);
tempMessage.show();
}
}}
Seeing Standard Output in DDMS














Idea
– DDMS (Dalvik Debug Monitor Service)
•จาลองเมือ
่ มีการโทรมายังมือถือ
• กาหนดพิกด
ั GPS
• แสดงข ้อผิดพลาดทีเ่ กิดจากโปรแกรม
• เพิม
่ รูปภาพในการทดสอบการทางาน
• Simple usage now
– Start DDMS
• Window Open Perspective
Other DDMS
• ครัง้ ต่อมาจะปรากฏ “DDMS” ทีต
่ าแหน่ง
ด ้านบนขวาของ Eclipse
• เลือก“Java”
– See print statements
DDMS Output (HelloAndroid)

Code

– เพิม
่ คาสงั่ System.out.println

ลงใน main onCreate method

• จะปรากฏผลลัพธ์ใน LogCat
Output of System.out.println
Entered so it is easier to find specific output
Among the many informational messages
that emulator prints
Debug an application in android



1.) Logcat
่ log informational
ใชจั้ ดการแสดงเหตุการณ์ในหลายลักษณะเชน
หรือ error messages จากการทีร่ ันโปรแกรม
2.) Eclipse Debugger
่ เดียวกับการ Debug Java program
การใช ้ Debug เชน
3.) Android Debug Bridge (adb)
การใช ้ command-line debugging และแสดงผลผ่าน Android
phone หรือ emulator.
Logcat

เปิ ด Logcat : Window > Show view > Other, Android > Logcat.

ระบบแสดงหน ้าจอ Logcat
Logcat















การกาหนดชนิดของ Log
V - stands -hvd (lowest priority)
D - stands for Debug
I - stand for Info
W - stands for Warning
E - stands for Error
การเขียนคาสงั่ เพือ
่ จัดการ Log
public class MyActivity extends Activity {
private static final String TAG = "MyActivity";
@Override
public void onCreate(Bundle savedInstanceState) {
Log.i(TAG,"On Create");
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG,"On Destroy");
}}
Logcat

การค ้นหาข ้อความทีป
่ รากฏใน Log : กรอกข ้อความทีต
่ ้องการค ้นหา

Log จะแสดง Tab ตามทีต
่ ้องการค ้นหา
Eclipse Debugger

Double-click เพือ
่ เลือกตาแหน่ง breakpoint หรือ click ขวาเลือก Toggle
Breakpoint:
Eclipse Debugger

ตาแหน่งโปรเจคเลือก debug as ->android application หรือเลือกปุ่ ม Debug ตรง
tool bar:
Eclipse Debugger



Step Into (
) or F5 key: เข ้าไปประมวลผลในเมธอด
Step Over ( ) or F6 key: เข ้าไปประมวลผลแถวถัดไป
Step Return ( ) orF7 key: กลับไปประมวลผลบรรทัดก่อนหน ้า
Related documents