bai 3 - giao dien nguoi dung

34
LP TRÌNH ANDROID BÀI 3: GIAO DIN NGƯỜI DÙNG Khóa đào to Lp trình di động đa nn tng HNPT – 04/2013 Trung tâm Tính toán Hiu năng cao, ĐH Bách Khoa Hà Ni

Upload: cho-xin-cai-ten

Post on 29-May-2017

222 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Bai 3 - Giao Dien Nguoi Dung

LẬP TRÌNH ANDROID

BÀI 3: GIAO DIỆN NGƯỜI DÙNG

Khóa đào tạo Lập trình di động đa nền tảng HNPT – 04/2013

Trung tâm Tính toán Hiệu năng cao, ĐH Bách Khoa Hà Nội

Page 2: Bai 3 - Giao Dien Nguoi Dung

2

Nội dung

 Giao diện người dùng

 View  Text, Button, List, Grid, …

 Layout  LinearLayout, AbsolutLayout, TableLayout, …

 Thực hành

Page 3: Bai 3 - Giao Dien Nguoi Dung

3

Nội dung

 Giao diện người dùng

 View  Text, Button, List, Grid, …

 Layout  LinearLayout, AbsolutLayout, TableLayout, …

 Thực hành

Page 4: Bai 3 - Giao Dien Nguoi Dung

4

Giao diện người dùng

 GUI trong Java: AWT, Swing, SWT, LWUIT, … và Android GUI.

 Mô hình: Model-View-Control  Model: database, contacts, etc. Một

model có thể được sử dụng cho nhiều View-Control

 View: hình ảnh hóa của Model. Android tổ chức View dưới dạng cây để quản lý

 Controller: đáp lại các thao tác bên ngoài như phím nhấn, chạm vuốt, cuộc gọi đến, v.v. Được biểu diễn dưới dạng hàng đợi sự kiện.

Page 5: Bai 3 - Giao Dien Nguoi Dung

5

Giao diện người dùng

 Việc lấy event từ hàng đợi và gọi callback của Controller là đơn luồng (single-threaded)  Đảm bảo mỗi event trong hàng đợi được xử lý hoàn toàn và theo đúng thứ tự như trong hàng đợi

 Giao diện sẽ bị đóng băng nếu quá trình xử lý lâu, Android có thể sẽ đề nghị đợi hoặc đóng ứng dụng.

Page 6: Bai 3 - Giao Dien Nguoi Dung

6

Giao diện người dùng

 Android sử dụng lớp View và ViewGroup  Widgets, kế thừa từ View: thiết kế các đối tượng trên giao diện.  Layout, kế thừa từ ViewGroup: chứa các layout và view khác.

 Một giao diện cho Activity có cấu trúc dạng cây

Page 7: Bai 3 - Giao Dien Nguoi Dung

7

Nội dung

 Giao diện người dùng

 View  Text, Button, List, Grid, …

 Layout  LinearLayout, AbsolutLayout, TableLayout, …

 Thực hành

Page 8: Bai 3 - Giao Dien Nguoi Dung

8

View

 Lớp View cung cấp các khối cơ bản cho các thành phần giao diện người dùng.

 Một View là một vùng chữ nhật trên màn hình, có thể vẽ lên và tương tác.

 View là lớp cơ bản cho widgets tạo ra các đối tượng giao diện (text, button, etc.)

Page 9: Bai 3 - Giao Dien Nguoi Dung

9

View > Sử dụng View

 Các View trong 1 cửa sổ được thiết kế dưới dạng 1 cây duy nhất, mô tả dưới định dạng XML.

 Khởi tạo View:  Trong tệp tin Layout  Trong code khi chạy chương trình.

 Các thao tác thông thường trên View  Set properties: thiết lập thuộc tính. Ví dụ: text, ID, căn chỉnh v.v…  Set focus: chuyển tập trung sang đối tượng.  Set up listeners: đặt listener cho đối tượng và xử lý khi có tương tác.

Ví dụ: setOnFocusChangeListener(..)  Set visibility: Ẩn hiện đối tượng View.

 Chú ý: Android chịu trách nhiệm căn chỉnh, sắp xếp và vẽ các đối tượng, ta không cần tự gọi các method này.

Page 10: Bai 3 - Giao Dien Nguoi Dung

10

View > Widgets

 Lớp con của View  TextView  EditText  Button  RadioButton  etc…

 UI events  onSomethingListener

– OnClickListener – OnTouchListener – OnKeyListener – …

Page 11: Bai 3 - Giao Dien Nguoi Dung

11

View > Ví dụ

setContentView(R.layout.hello_activity); //will load the XML UI file

Page 12: Bai 3 - Giao Dien Nguoi Dung

12

View > ListView

 Tạo ra danh sách đối tượng có thể kéo  Các đối tượng tự động thêm vào list qua một ListAdapter.  Danh sách có thể đặt trước trong 1 mảng.

Page 13: Bai 3 - Giao Dien Nguoi Dung

13

View > Một số View khác

TabView GridView FrameLayout

Page 14: Bai 3 - Giao Dien Nguoi Dung

14

View > Một số View khác

WebView MapView SurfaceView

Page 15: Bai 3 - Giao Dien Nguoi Dung

15

Nội dung

 Giao diện người dùng

 View  Text, Button, List, Grid, …

 Layout  LinearLayout, AbsolutLayout, TableLayout, …

 Thực hành

Page 16: Bai 3 - Giao Dien Nguoi Dung

16

Layout

 Định nghĩa vị trí các phần tử quan hệ với nhau  cạnh nhau  trên, dưới  bảng, lưới, danh sách  …

Page 17: Bai 3 - Giao Dien Nguoi Dung

17

Layout > Layout và Activity

Page 18: Bai 3 - Giao Dien Nguoi Dung

18

Layout > LinearLayout

 Sắp xếp các đối tượng một cách tuần tự  Hàng ngang  Hàng dọc

Page 19: Bai 3 - Giao Dien Nguoi Dung

19

Layout > Relative Layout

 Sắp xếp vị trí các đối tượng một cách tương đối  Ví dụ: Về bên trái, phía dưới của Layout.  Rất hữu ích trong việc thiết kế các Layout lồng

Page 20: Bai 3 - Giao Dien Nguoi Dung

20

Layout > TableLayout

 Hiển thị các đối tượng View con theo hàng và cột

Page 21: Bai 3 - Giao Dien Nguoi Dung

21

Layout > XML file

Cấu trúc dạng cây!

Page 22: Bai 3 - Giao Dien Nguoi Dung

22

Layout > Khởi tạo đối tượng trong code

Page 23: Bai 3 - Giao Dien Nguoi Dung

23

Nội dung

 Giao diện người dùng

 View  Text, Button, List, Grid, …

 Layout  LinearLayout, AbsolutLayout, TableLayout, …

 Thực hành

Page 24: Bai 3 - Giao Dien Nguoi Dung

24

Thực hành > TabLayout

 Một activity / tab

Page 25: Bai 3 - Giao Dien Nguoi Dung

25

Thực hành > TabLayout

 Tạo 3 activities

public class ArtistsActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

TextView textview = new TextView(this); textview.setText("This is the Artists tab"); setContentView(textview); } }

Tương tự với AlbumsActivity và SongsActivity

Khởi tạo từ code!!!

Page 26: Bai 3 - Giao Dien Nguoi Dung

26

Thực hành > TabLayout

Chuẩn bị 3 icons,

Tạo ./res/drawable (nếu chưa có)

Copy icons vào ./res/drawable

Page 27: Bai 3 - Giao Dien Nguoi Dung

27

Thực hành > TabLayout

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- When selected, use grey --> <item android:drawable="@drawable/ic_tab_artists_grey" android:state_selected="true" /> <!-- When not selected, use white--> <item android:drawable="@drawable/ic_tab_artists_white" /> </selector>

Tương tự với ic_tab_albums.xml và ic_tab_songs.xml

Page 28: Bai 3 - Giao Dien Nguoi Dung

28

Thực hành > TabLayout

  <?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="5dp"> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="5dp" /> </LinearLayout> </TabHost>

Page 29: Bai 3 - Giao Dien Nguoi Dung

29

Thực hành > TabLayout

public void onCreate(Bundle savedInstanceState)

super.onCreate(savedInstanceState); setContentView(R.layout.main);

Resources res = getResources(); // Resource object to get Drawables TabHost tabHost = getTabHost(); // The activity TabHost TabHost.TabSpec spec; // Resusable TabSpec for each tab Intent intent; // Reusable Intent for each tab

// Create an Intent to launch an Activity for the tab (to be reused) intent = new Intent().setClass(this, ArtistsActivity.class);

// Initialize a TabSpec for each tab and add it to the TabHost spec = tabHost.newTabSpec("artists").setIndicator("Artists",

res.getDrawable(R.drawable.ic_tab_artists)) .setContent(intent); tabHost.addTab(spec);

// Do the same for the other tabs [………………………] tabHost.setCurrentTab(2); }

TabActivity là activity chính, có TabHost

Ánh xạ resource vào tab

Chọn Tab 2

Page 30: Bai 3 - Giao Dien Nguoi Dung

30

Thực hành > TabLayout

 Chạy chương trình

Page 31: Bai 3 - Giao Dien Nguoi Dung

31

Thực hành > ListView

 Cho phép cuộn items

 Có thể thừa kế ListActivity!

 Item định nghĩa trong ./res/layout/list_item.xml

<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dp" android:textSize="20sp" > </TextView>

Page 32: Bai 3 - Giao Dien Nguoi Dung

32

Thực hành > ListView

 OnCreate public class HelloListView extends ListActivity { /** Called when the activity is first created. */

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES));

ListView lv = getListView(); lv.setTextFilterEnabled(true);

lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // When clicked, show a toast with the TextView text Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); } }); } }

Hằng mảng chứa tên các nước

Hiển thị 1 message khi 1 item được click

Page 33: Bai 3 - Giao Dien Nguoi Dung

33

THANKS AND QUESTION ?

Page 34: Bai 3 - Giao Dien Nguoi Dung

34

Bài tập

1.  Thực hiện lại 2 ví dụ về tablayout và listview

2.  Viết chương trình hiển thị 1 câu hỏi và 4 đáp án. Khi người dùng nhấn nút trả lời thì hiện thông báo đúng hay sai (Dùng RadioButton và RadioGroup)

3.  Viết chương trình thu nhập thông tin người dùng (tên, tuổi, giới tính, ngày tháng năm sinh), khi nhấn nút submit thì hiển thị lại thông tin vừa nhập (dùng DatePicker cho ngày tháng năm sinh)