Introduction to database system Intro to android.pdfDatePicker DigitalClock EditText...

Preview:

Citation preview

www . i t s c i .m ju . ac . t h / sayan

INTRODUCTION TO ANDROID DEVELOPMENT SAYAN UNANKARD

2

ส่วนประกอบของ ANDROID

• AndroidManifest.xml

• Views

• Activities

• Broadcast Receiver

• Services

• Content Providers

• Intents

2

VIEW

เป็นวัตถุที่วาดลงบนหน้าจอ• xml

• โปรแกรม

สามารถสร้างขึ้นเพื่อใช้งานได้ เช่น

• Games

• New widgets

3

ACTIVITY

Activities จัดเตรียม user interface ส าหรับงานใดงานหนึ่ง และ คอมโพแนนซ์ที่เป็นพื้นฐานของทุก ๆ แอพพลิเคชัน

เป็นพื้นที่ในการเขียนชุดค าสั่ง โดยแต่ละ Activity ถูก implemented โดยเป็น subclass ของคลาส Activity

มีหน้าที่ในการประมวลผลค าสั่งตามความต้องการของผู้ใช้

มีช่วงชีวิตการท างาน• Paused, Killed, etc.

4

BROADCAST RECEIVER

Broadcast receivers ท าหน้าที่คล้ายกับกล่องจดหมายส าหรับรับข้อความจากแอพพลิเคชันอื่น ๆ โดยสามารถรับและตอบสนองกับ Event ต่าง ๆ

ถ้า app ลงทะเบียนตัว receiver แล้ว ตัว event จะสามารถแจ้งเตือน และเรียกตัวซอฟต์แวร์น้ัน ๆ ได้

เช่น Low battery, power connected, shutdown, time zone changed, etc.

5

SERVICE

เป็นโค้ดที่รันเบื้องหลังการท างานอ่ืน ๆ

มีช่วงระยะเวลาการท างานนาน ๆ

ไม่มี UI

มีความปลอดภัยถ้าใช้ permissions

ตัวอย่างการท างานเช่น

• Play music, alarm clock, etc.

6

CONTENT PROVIDER

Content providers เป็นแหล่งเก็บข้อมูลซึ่งใช้ส าหรับการแลกเปลี่ยนข้อมูลระหว่างแอพพลิเคชัน

โอนถ่ายข้อมูลระหว่างแอพพลิเคชันต่าง ๆ ใน Android

แอพพลิเคชันอื่น ๆ ใช้ ContentResolver object ในการเข้าถึงข้อมูลที่มีการจัดเตรียมไว้ให้โดย ContentProvider

รูปแบบของข้อมูลเช่น• File System

• SQL Lite

7

INTENT

เป็นการส่งข้อมูลระหว่าง• Activity

• Service

• Broadcast Receiver

• Content Provider

การส่งเป็นแบบ Asynchronous ที่สามารถส่งข้อมูลพร้อมกับการประมวลผลส่วนอื่น ๆ

ภายใน intent เก็บ• Action

• Data

• ในการส่งข้อมูลใช้ค าสั่ง startActivity()8

APPLICATION และ ACTIVITY

Activity แต่ละตัวมีช่วงชีวิตการท างานของตัวเอง

หน้าจอต้องประมวลผลค าสั่งผ่าน Activity

แอพพลิเคชันมีได้หลาย Activity

แอพพลิเคชันจะประมวลผลใน Linux process ของตัวเอง

Application

View (GUI Element)

View (GUI Element)

View (GUI Element)

ACTIVITYSCREEN

ACTIVITYSCREEN

9

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.android.hello"

android:versionCode="1"

android:versionName="1.0.0">

<application android:icon="@drawable/icon"android:label="@string/app_name">

<activity android:name=".HelloAndroid" android:label="@string/app_name">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

</manifest>

ANDROIDMANIFEST.XML

เป็นส่วนรวบรวมข้อมูลที่ใช้ในการรันโปรแกรม

Indicate the first target

10

ACTIVITY LIFE CYCLE

Starting เป็นสถานะเริ่มต้นการท างานRunning เป็นสถานะท างานบนหน้าจอPaused• ย้ายไปประมวลผลเบื้องหลัง• หากมีการใช้หน่วยความจ ามาก ๆ

อาจจะเก็บข้อมูลที่ก าลังท างานไว้ในหน่วยความจ าแล้วสิ้นสุดการท างานโดยอัตโนมัติ

Stopped• หยุดท างาน (แต่ยังอยู่ใน

หน่วยความจ า)Destroy ลบออกจากหน่วยความจ า

11

เมธอดส ำหรับเขียนค ำสั่งควบคุมช่วงเวลำกำรท ำงำนของ ACTIVITY

• onCreate() ถูกเรียกใช้เมื่อเริ่มต้นการ

ท างาน เพื่อเรียกออปเจคที่สร้างไว้ จากนั้น

เรียกใช้เมธอด onStart()

• onStart() ก าหนดให้ Activity แสดงผลและ

เปลี่ยนสถานะเป็น onResume()

• onResume() ถูกเรียกใช้เมื่อพร้อมติดต่อกับ

ผู้ใช้งาน หรือเมื่อ Acitivity จาก paused

มาท างานใหม่อีกรอบหนึ่ง

12

เมธอดส ำหรับเขียนค ำสั่งควบคุมช่วงเวลำกำรท ำงำนของ ACTIVITY

• onPause() เมื่อก าหนดให้ Actitivityเปลี่ยนกลับไปท างานเบื้องหลัง

• onRestart() ก าหนดให้ Actitivityกลับมาท างานอึกครั้งหนึ่ง

• onStop() หยุดการท างานที่อาจกลับมาใช้งานใหม่ หรือส้ินสุดการท างาน

• onDestroy() ปิดการท างานของ Activity

13

ACTIVITY

public class SimpleActivity extends Activity {

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Toast.makeText(this, "Create", Toast.LENGTH_SHORT).show();

}

protected void onStart() {

super.onStart();

Toast.makeText(this, "Start", Toast.LENGTH_SHORT).show();

}

14

ACTIVITY

protected void onResume() {

super.onResume();

Toast.makeText(this, "Resume", Toast.LENGTH_SHORT).show();

}

protected void onRestart() {

super.onRestart();

Toast.makeText(this, "Restart", Toast.LENGTH_SHORT).show();

}

protected void onPause() {

super.onPause();

Toast.makeText(this, "Pause", Toast.LENGTH_SHORT).show();

}

15

ACTIVITY

protected void onStop() {

super.onStop();

Toast.makeText(this, "Stop", Toast.LENGTH_SHORT).show();

}

protected void onDestroy() {

super.onDestroy();

Toast.makeText(this, "Destroy", Toast.LENGTH_SHORT).show();

// Toast.makeText(getApplicationContext() , "onDestroy",

//Toast.LENGTH_SHORT).show();

}

}

16

APP WHEN FIRST START

17

WHEN CLICK UNDO

18

VIEW

AutoCompleteTextView

Button

CheckBox

CheckedTextView

DatePicker

DigitalClock

EditText

ExpandableListView

GridView

ImageButton

ListView

MapView

MultiAutoCompleteTextView

RadioButton

RatingBar

ScrollView

Spinner

TabHost

TableRow

TimePicker

ToggleButton

TwoLineListItem

VideoView

19

VIEW

การสร้าง layout ด้วย Java-based

การสร้าง layout ด้วย XML-based

การสร้าง layout ด้วย Android visual layout editor

การสร้าง layout แบบ Hybrid layout

20

JAVA-BASED APPROACH: TEMPLATE

การค าสั่งพื้นฐานที่ปรากฏในหน้าจอที่สร้างขึ้นประกอบด้วย Layout โดยในส่วนของ เป็นเสมือนฉากหลังในการวัตถุอื่นๆ

TableRow

Implements <View, ViewParent>

ViewGroup

FrameLayout

LinearLayout

RadioGroup TableLayout

21

JAVA-BASED APPROACH: TEMPLATE

ViewView() ใช้สร้าง Object ViewfindViewById() ใช้ค้นหา View ที่อยู่ภายใน Object View นี้ ที่มี id ตามที่

ก าหนด

ViewGroupaddView ( child ) ใช้เพิ่ม Object View เข้าไปใน Object LayoutaddView ( child, index ) ใช้เพิ่ม Object View เข้าไปใน Object Table ณ ต าแหน่งที่

ก าหนดremoveView(start,count) ลบ Object View ออกจาก Object Layout ณ ต าแหน่งที่

ก าหนด และจ านวน Object View ที่ต้องการลบ

22

JAVA-BASED APPROACH: TEMPLATE

คลาส View คือวัตถุที่วางใน Layout

Object

View

TextView

Button EditText

CheckBox RadioButton

CompoundButton

23

JAVA-BASED APPROACH: TEMPLATE

Button / TextView

Button() ใช้สร้าง Object Button

TextView() ใช้สร้าง Object TextView

setText ( text ) ใช้ก าหนดข้อความ ให้กับ Object TextView

setText ( text, start, len ) ใช้ก าหนดข้อความ ให้กับ Object TextView

getText() น าข้อความออกจาก Object TextView

24

JAVA-BASED APPROACH: TEMPLATE

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

String message = "...";

LinearLayout window = new LinearLayout(this);

Button b = new Button(this);

b.setText("Button Label");

b.setOnClickListener(new SomeHandler());

TextView t = new TextView(this);

t.setText("Text Label");

window.addView(b);

window.addView(t);

setContentView(window);

}

25

XML-BASED APPROACH: TEMPLATE

Java

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

public void handlerMethod(View clickedButton) { }

xml

res/values/strings.xml res/layout/activity_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 android:text="@string/some_name" />

<Button … android:onClick="handlerMethod" />

</LinearLayout>

26

XML-BASED APPROACH: TEMPLATE

<?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"

android:paddingLeft="5dp"

android:paddingRight="5dp"

android:paddingTop="5dp">

</LinearLayout>

margin เป็นการก าหนดระยะห่างระหวา่งวตัถุ

padding จดัระยะห่างระหวา่งขอบของวตัถุ และเน้ือหา

27

XML-BASED APPROACH: TEMPLATE

px -> ค่าพิกเซลจริงของจอภาพ

dip/dp -> ค่าพิกเซลอ้างอิงตามขนาดจอ 160 dpi

sp -> ค่าพิกเซลอ้างอิงตามของ font ที่ผู้ใช้เลือกไว้

pt -> ค่าความยาว 1/72 ตามขนาดของหน้าจอจริง

in -> ค่าความยาวเป็นนิ้วตามขนาดของหน้าจอจริง

mm ->ค่าความยาวเป็นมิลลิเมตรตามขนาดของหน้าจอจริง

28

XML-BASED APPROACH: TEMPLATE

wrap_content เป็นการก าหนดขนาดให้พอดีกับขนาดของวัตถุ

fill_parent เป็นการก าหนดขนาดให้พอดีกับขนาดของหน้าจอ ไม่ว่าจะเป็นแอนดรอยด์ที่มีขนาดหน้าจอต่างกัน

match_parent เหมือนกับ fill_parent ซึ่งก็คือ fill_parent แหละ แต่ได้เปลี่ยนมาใช้เป็น match_parent ใน API 8 ดังนั้นใน API ต่ ากว่า 8 จะใช้ match_parent ไม่ได้

29

HYBRID APPROACH: TEMPLATE

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 {

public void onClick(View clickedButton) {

doSomething(...);

}

}

xml

สร้างหน้าจอก าหนดค่า id

<button

android:layout_width="wrap_content"

android:layout_height="wrap_content“

android:id="@+id/button_id" />

30

LISTENERS

การติดต่อกับผู้ใช้แบ่งการท างานออกเป็น 2 ส่วน• ส่วนการสร้าง Layout

• ส่วนของเหตุการณ์ (Event) เช่นการกดปุ่มบนหน้าจอ การสัมผัสต าแหน่งบนหน้าจอ

เมื่อมีเหตุการณ์เกิดขึ้นต้องสร้างเมธอดเพื่อรองรับการท างาน

• เมื่อกดปุ่ม Back เรียกใช้เมธอด onBackPressed()

• เมื่อกดปุ่มทั่วไปเรียกใช้เมธอด onClick()

การท างานของ View ต่าง ๆ จะท างานร่วมกับ Event Listener เพื่อใช้ตรวจสอบการท างานของผู้ใช้หากตรงกับ Event ที่ระบุไว้จะเริ่มท างาน• เช่น setOnclickListenner หากเกิดการกดปุ่มจะเรียกใช้เมธอด onClick

31

LISTENERS

GestureDetector.OnGestureListener -Notify when gestures occur (การวาดรูปบนจอภาพ)

MenuItem.OnMenuItemClickListener - a menu item is clicked.

View.OnClickListener - a view is clicked.

View.OnCreateContextMenuListener -the context menu for this view is being built.

View.OnFocusChangeListener - the focus state of a view changed.

View.OnKeyListener - a key event is dispatched to this view.

View.OnLongClickListener - a view has been clicked and held.

View.OnTouchListener - a touch event is dispatched to this view.

ViewGroup.OnHierarchyChangeListener - the hierarchy within this view changed.

ViewStub.OnInflateListener - ViewStub has successfully inflated its layout resource.

ViewTreeObserver.OnGlobalFocusChangeListener - the focus state within the view tree changes.

32

LISTENERS

ViewTreeObserver.OnGlobalLayoutListener- the global layout state or the visibility of views within

the view tree changes.

ViewTreeObserver.OnPreDrawListener - the view tree is about to be drawn.

ViewTreeObserver.OnTouchModeChangeListener - the touch mode changes.

33

ONCLICK LISTENERS

34

ONCLICK LISTENERS

เพิ่มปุ่ม และ TextField ลงใน Layout

ก าหนด id

สร้าง Listener เพื่อตรวจสอบการคลิก

clickButton.setOnClickListener(new View.OnClickListener() {

});

ก าหนดการท างานลงในฟังก์ชัน onClick()public void onClick(View arg0) {}

<EditText android:id="@+id/editText“ />

<Button android:id="@+id/buttonclick"/>

35

CLICK LISTENER EXAMPLE

public class SimpleStringActivity extends Activity {

private EditText textMessage;

private Button clickButton;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

textMessage =(EditText) findViewById(R.id.editText);

clickButton = (Button)findViewById(R.id.buttonclick);

clickButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) { textMessage.setText("On click"); }

});

}

}

36

CLICK LISTENER EXAMPLE

37

RADIOGROUP / RADIOBUTTON

ค าสั่ง getCheckedRadioButtonId()

38

XML

<RadioGroup android:id="@+id/radioGroup1"

android:layout_width="wrap_content" android:layout_height="wrap_content">

<RadioButton android:layout_width="wrap_content"

android:text="RadioButton" android:layout_height="wrap_content"

android:id="@+id/radio1"></RadioButton>

<RadioButton android:layout_width="wrap_content"

android:text="RadioButton" android:layout_height="wrap_content"

android:id="@+id/radio2"></RadioButton>

</RadioGroup>

<Button android:text="Button" android:id="@+id/button1"

android:layout_width="wrap_content“android:layout_height="wrap_content">

</Button>

39

ACTIVITY

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

btn1= (Button)findViewById(R.id.button1);

rg = (RadioGroup)findViewById(R.id.radioGroup1);

rd1 = (RadioButton)findViewById(R.id.radio1);

rd2 = (RadioButton)findViewById(R.id.radio2);

btn1.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

if (view.getId() == btn1.getId()) {

if(rg.getCheckedRadioButtonId() == rd1.getId()){

Toast.makeText(SampleViewActivity.this, "radio1",

Toast.LENGTH_SHORT).show(); }

}

}

} }40

CHECKBOX

41

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">

<CheckBox android:text="CheckBox1" android:id="@+id/checkBox1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"></CheckBox>

<CheckBox android:text="CheckBox2" android:id="@+id/checkBox2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"></CheckBox>

<CheckBox android:text="CheckBox3" android:id="@+id/checkBox3"

android:layout_width="wrap_content"

android:layout_height="wrap_content"></CheckBox>

</LinearLayout>

42

ACTIVITY

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

chk1 = (CheckBox)findViewById(R.id.checkBox1);

chk2 = (CheckBox)findViewById(R.id.checkBox2);

chk3 = (CheckBox)findViewById(R.id.checkBox3);

chk1.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

if (chk1.isChecked()) {

Toast.makeText(SampleMultiActivity.this, "check 1",

Toast.LENGTH_SHORT).show();

}

}

}

} 43

Recommended