Bài giảng Lập trình di động - Bài 2: Activity (giao diện tương tác)

pdf 76 trang Gia Huy 17/05/2022 4790
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình di động - Bài 2: Activity (giao diện tương tác)", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_lap_trinh_di_dong_bai_2_activity_giao_dien_tuong_t.pdf

Nội dung text: Bài giảng Lập trình di động - Bài 2: Activity (giao diện tương tác)

  1. LẬP TRÌNH DI ĐỘNG Bài 2: activity (giao diện tương tác)
  2. Nội dung 1. Bắt đầu với một ứng dụng giản đơn 2. Giao diện phát triển của Android Studio 3. AndroidManifest.xml 4. Các bước phát triển ứng dụng android 5. Các thành phần của một ứng dụng android 6. Khái niệm activity (giao diện tương tác) 7. Vòng đời của một activity 2
  3. Phần 1 Bắt đầu với một ứng dụng giản đơn 3
  4. Thiết kế giao diện ▪Button “THOÁT” ▪Button “HELLO” ▪EditText “Name” ▪Chức năng: ▪ Dừng ứng dụng ▪ Hiện thị lời chào với tên lấy từ nội dung nhập vào EditText 4
  5. Thiết kế giao diện 4
  6. Thiết kế giao diện ID: thuộc tính định danh công cụ, dựa vào id này để lấy đúng điều khiển khi cần tham chiếu Text: nội dung hiển thị trên công cụ 4
  7. Thiết kế giao diện Button Thoát: - Id : btnExit - Text: Thoát Button Hello: - Id : btnHello - Text: Hello EditText: Name: - Id: edtName 4
  8. Thiết kế giao diện Mã XML tự sinh từ các công cụ được tạo ra từ giao diện Design Button Thoát Button Hello EditText Name 4
  9. Viết mã xử lý 5
  10. Viết mã xử lý Các code sẵn có. Phương thức OnCreate() : khởi tạo cho main activity 5
  11. Viết mã xử lý Khai báo các điều khiển trên giao diện đã thiết kế Tại sao? Khai báo các đối tượng từ những lớp quản lý công cụ điều khiển từ thư viện có sẵn 5
  12. Viết mã xử lý Liên kết(ánh xạ) các điều khiển từ giao diện vào mã lệnh Hàm findViewById: tìm và ánh xạ điều khiển từ file giao diện XML vào biến tương ứng để xử lý trong môi trường code 5
  13. Viết mã xử lý Gán sự kiện vào điều khiển sau khi được ánh xạ 5
  14. Viết mã xử lý Xử lý sự kiện click của nút Thoát (btnExit) Giải thích: gọi phương thức setOnClickListener từ đối tượng btnExit(Button) tiếp theo chúng ta phải tạo mới một View.OnClickListener bằng cách nạp chồng (Override) lại sự kiện onClick và viết mã lệnh cần xử lý vào đó. 5
  15. Viết mã xử lý Xử lý sự kiện click của nút Hello (btnHello Button). edtName True: thông báo là rỗng “Xin chào Android” False: Thông báo “Xin chào” giá trị trong editName “đến với android” 5
  16. Viết mã xử lý Xử lý sự kiện click của nút Hello (btnHello Button). 5
  17. Viết mã xử lý Xử lý sự kiện click của nút Hello (btnHello Button). edtName.getText().ToString(): lấy nội dung trong textView (edit text) và chuyển sang kiểu string Toast.makeText(getApplicationContext(), “Nội dung", Toast.LENGTH_SHORT).show(); - Toast: quản lý hiển thị thông báo (giống như msgBox bên VS C#): - Phương thức makeText: tạo thông báo (tạm hiểu) gồm các tham số o getAppicationContext(): tham số ngữ cảnh ứng dụng dành cho những đối tượng thực thi tách biệt với Activity hiện hành o Nội dung thông báo o Toast.LENGTH_SHORT: thời gian hiển thị thông báo (ngắn) o Phương thức Show(): hiển thị thông báo khi tham chiếu makeText 5
  18. Chạy thử ứng dụng ▪Hàm “onCreate” khởi chạy sẽ thiết lập giao diện và xử lý sự kiện ▪Khi bấm nút “THOÁT”: hàm xử lý sự kiện ứng với id btnExit được kích hoạt ▪Khi bấm nút “HELLO”: hàm xử lý sự kiến ứng với id btnHello được kích hoạt 7
  19. Chạy thử ứng dụng Bỏ trống edtName & bấm HELLO Nhập tên vào edtName & bấm HELLO 7
  20. Phần 2 Giao diện phát triển của Android Studio 8
  21. Giao diện của Android Studio 9
  22. Giao diện của Android Studio 10
  23. Giao diện của Android Studio ▪Cửa sổ dự án cho phép người dùng xem các thành phần của dự án theo nhóm ▪ Đây không phải là cấu trúc thực trên hệ thống file ▪Được phân thành hai nhóm: ▪ Nhóm “app”: các thành phần của ứng dụng ▪ Nhóm “Gradle Scripts”: các tham số điều khiển quá trình dịch và đóng gói ứng dụng 11
  24. Giao diện của Android Studio ▪Nhóm “app” gồm 3 nhóm nhỏ: ▪ “manifests”: chứa các file xml cấu hình ứng dụng ▪ “java”: chứa các file mã nguồn java của ứng dụng ▪ “res”: chứa các file tài nguyên của ứng dụng • “drawable”: các file ảnh • “layout”: các file xml bố cục • “values”: các file xml hằng số 12
  25. Giao diện của Android Studio 13
  26. Phần 3 AndroidManifest.xml 14
  27. AndroidManifest.xml ▪Trước khi chạy, project cần phải được build (dựng), quá trình này phức tạp, nhưng có 2 bước chính ▪ Dịch mã nguồn thành mã nhị phân ▪ Nén tất cả các file mã nhị phân và các file liên quan thành một file duy nhất, có phần mở rộng là apk ▪Khi cài đặt ứng dụng, hệ thống giải nén file apk và đọc file AndroidManifest.xml ở thư mục gốc ▪ “AndroidManifest.xml” chứa các khai báo về ứng dụng ▪ Qua việc phân tích nội dung của file, hệ thống biết ứng dụng có thể dùng vào việc gì 15
  28. AndroidManifest.xml ▪Các thông tin cơ bản trong “AndroidManifest.xml” ▪ Các thông tin về ứng dụng (tên package, tên ứng dụng, biểu tượng của ứng dụng, ) ▪ Các quyền cần có để chạy ứng dụng (quyền truy xuất internet, quyền đọc contact, quyền đọc SD card, ) ▪ Phiên bản API tối thiểu có thể chạy ứng dụng ▪ Các tính năng phần cứng cần thiết cho ứng dụng (GPS, camera, bluetooth, ) ▪ Các bộ API liên kết sử dụng trong ứng dụng (Google Maps API, AdMod, ) ▪ Cấu hình màn hình khởi chạy (ngang/dọc, ) 16
  29. AndroidManifest.xml ▪Các thông tin cơ bản trong “AndroidManifest.xml” ▪ Mô tả về các activity (màn hình) của ứng dụng • Thông tin về activity (tên activity, tên class, .) • Xác định xem activity nào là giao diện khởi động của ứng dụng ▪ Mô tả về các service (dịch vụ) mà ứng dụng cung cấp • Thông tin về service (tên dịch vụ, class xử lý dịch vụ, ) ▪ Mô tả về các broadcast receiver mà ứng dụng cung cấp • Thông tin về receiver (tên receiver, class xử lý, ) • Các loại tín hiệu gửi đến receiver ▪ Mô tả về các content provider mà ứng dụng cung cấp • Các đối tượng truy xuất content provider • Các quyền truy xuất content provider 17
  30. AndroidManifest.xml 18
  31. Phần 4 Các bước phát triển ứng dụng android 19
  32. Các bước phát triển android apps 1. Nghiên cứu nhu cầu 2. Xây dựng giải pháp ▪ Giải pháp có thể gồm các thành phần ngoài android (chẳng hạn như web service) ▪ Đôi khi giải pháp không đáp ứng được nhu cầu do hạn chế về công nghệ 3. Viết ứng dụng 4. Phát hành ứng dụng 5. Nhận phản hồi, chỉnh sửa và nâng cấp 20
  33. Viết ứng dụng ▪Thiết kế phác họa giao diện (mockup) ▪Chuẩn bị các tài nguyên (file ảnh, file âm thanh, video, văn bản, ) ▪Thiết kế giao diện ▪ Các activity (mỗi giao diện là một activity) ▪ Lưu dạng XML để dễ dàng chỉnh sửa ▪Viết mã ▪ Các mã khởi tạo giao diện ▪ Các mã hoạt động nền ▪ Các mã liên kết giữa nền và giao diện 21
  34. Phần 5 Các thành phần của một ứng dụng android 22
  35. Ứng dụng android ▪Mỗi ứng dụng android đều chạy trên một tiến trình riêng trong một máy ảo riêng biệt ▪Mỗi ứng dụng android là tập hợp các class, mỗi class có mục đích cụ thể ▪Hệ điều hành sẽ chủ động gọi thực thi class phù hợp khi thấy cần thiết ▪ Như vậy ta thấy ứng dụng android hơi có tính “bị động”, các class sẽ được hệ điều hành chủ động gọi ra chạy, điều này khác với cách viết thông thường (hàm main chạy trước tiên, hàm main sẽ quyết định quá trình thực thi của ứng dụng) 23
  36. Activity ▪Một activity là một màn hình giao diện, một ứng dụng gồm một hoặc nhiều activity ▪Android OS cung cấp sẵn một số lượng khá lớn các activity tiêu chuẩn ▪Ví dụ: ▪ Giao diện quay số và gọi điện ▪ Giao diện settings ▪Lập trình viên có thể tự viết activity riêng hoặc sử dụng các activity đã có 24
  37. Activity ▪Activity settings, được ▪Một activity được bên cung cấp bởi hệ thống thứ 3 tự xây dựng 25
  38. Service ▪Service là một tiến trình thực thi một công việc chạy ngầm (thường không có hoặc rất ít tương tác với người sử dụng) ▪Ví dụ: ▪ Điều khiển việc chạy file nhạc ▪ Thực hiện việc download/upload dữ liệu ▪ Theo dõi và cảnh báo dung lượng pin ▪ Theo dõi xem có cập nhật MXH hay không? ▪ Ghi nhận ngầm thông tin (GPS chẳng hạn) 26
  39. Content provider ▪Content provider (còn gọi tắt là provider) dùng quản lý việc chia sẻ (dùng chung) một nguồn dữ liệu nào đó. Ví dụ: ▪ Danh sách người dùng trên điện thoại ▪ Dữ liệu về các cuộc gọi ▪ Dữ liệu về tin nhắn ▪Bằng cách chia sẻ dữ liệu để dùng chung, Android OS làm cho các ứng dụng dễ dàng cung cấp trải nghiệm nhất quán cho người dùng (chẳng hạn các ứng dụng thoại dùng chung danh bạ điện thoại) 27
  40. Broadcast receiver ▪Broadcast receiver (còn gọi tắt là receiver) là một thành phần hồi đáp những tín hiệu được phát ra trên toàn hệ thống. Ví dụ: ▪ Tín hiệu pin yếu ▪ Tín hiệu mất kết nối mạng ▪ Tín hiệu có cuộc gọi tới ▪Lập trình viên có thể chặn các tín hiệu này và xử lý theo cách riêng của mình. Chẳng hạn: ▪ Ứng dụng ngắt cuộc gọi đến từ số điện thoại quấy rối ▪ Bật âm thanh cảnh báo khi điện thoại đã nạp đầy pin 28
  41. Intent ▪Intent là cơ chế chuẩn của Android OS để truyền thông tin giữa các thành phần cho nhau (giữa activity với nhau, activity cho service, receiver cho service, ) ▪Chẳng hạn có thể sử dụng Intent để: ▪ Gọi một service ▪ Mở một activity ▪ Hiển thị một trang web hoặc danh sách contacts ▪ Hiển thị gallery để chọn ảnh 29
  42. Các thành phần của ứng dụng 30
  43. Cách thực thực thi điển hình Content Broadcast Services Providers receiver Notification Intent 31
  44. Phần 6 Khái niệm activity (giao diện tương tác) 32
  45. Activity ▪Các activity là thành phần cơ bản của bất kỳ một ứng dụng android nào, chúng cung cấp giao diện người dùng cho ứng dụng ▪Lớp Activity đảm nhận việc tạo ra một cửa sổ (window), sau đó ta có thể đặt lên đó một giao diện bằng lệnh setContentView(View) ▪Thông thường mỗi màn hình sẽ là một activity, một ứng dụng thường gồm nhiều activity chuyển qua lại lẫn nhau 33
  46. Activity ▪Một activity có thể mang nhiều dạng khác nhau: ▪ Cửa sổ chiếm toàn bộ màn hình ▪ Cửa sổ chiếm một phần màn hình ▪ Nằm lồng bên trong một activity khác ▪Để có thể sử dụng, mọi activity đều phải được khai báo trong AndroidManifest.xml với thẻ 34
  47. Tạo Activity Mỗi activity trình bày một màn hình, class xử lý activity bao giờ cũng kế thừa lớp Activity của Android 35
  48. Khởi tạo giao diện bên trong • Có 2 cách đơn giản để tạo giao diện cho activity • Tự tạo giao diện bằng viết mã @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); MyView myView = new MyView(this); setContentView(myView);} • Tạo mới bằng công cụ: File → new → Activity hoặc R_click project → new → Activity 36
  49. Gọi activity khác ▪Gọi trực tiếp activity đã định nghĩa Intent i = new Intent(this, MyActivity.class); startActivity(i); ▪Gọi gián tiếp activity Intent i = new Intent(Intent.ACTION_SEND); i.putExtra(Intent.EXTRA_EMAIL, addList); startActivity(i); ▪Khi gọi gián tiếp, hệ thống tự chọn activity phù hợp nhất với yêu cầu (sẽ được thảo luận sau) 37
  50. Thảo luận về intent - Yêu cầu Khi bấm vào nút gửi: →Nếu edtName rỗng thì hiển thị thông báo yêu cầu nhập →Ngược lại, tiến hành gọi một activity_two và gửi dữ liệu nhập từ edtname và hiển thị trên activity_two - Bấm vào nút trở về thì quay lại MainActivity 37
  51. Một ví dụ về Intent Trở lại ví dụ trên - tiến hành tạo them một activity tên activity_two: 37
  52. Một ví dụ về Intent Thiết kế giao diện cho Activity_two như sau: 37
  53. Một ví dụ về Intent Trên giao diện ActivityMain thêm một nút lệnh như sau: 37
  54. Một ví dụ về Intent Viết code cho nút gửi btnSend True: thông báo edtName “chưa nhập tên” là rỗng không gọi activity_two False - tạo đối tượng Intent - Đẩy dữ liệu edtname vào biến đối tượng Intent - Khởi động activity_two với đối tượng intent 37
  55. Một ví dụ về Intent Viết code cho nút gửi btnSend 37
  56. Một ví dụ về Intent Giải thích thêm: Tạo đối tượng intent với mục tiêu là Activity_Two Intent i = new Intent(this, ActivityTwo.class); Dữ liệu gửi kèm theo i.putExtra("NAME",name); Yêu cầu khởi động Activity chỉ định trong Intent startActivity(i); 37
  57. Một ví dụ về Intent Giải thích thêm: Tạo đối tượng intent với mục tiêu là Activity_Two Intent i = new Intent(this, ActivityTwo.class); Dữ liệu gửi kèm theo i.putExtra("NAME",name); Yêu cầu khởi động Activity chỉ định trong Intent startActivity(i); 37
  58. Một ví dụ về Intent Viết code cho Activity_Two: nhận dữ liệu và hiển thị Tạo một đối tượng intent để nhận giá trị intent được gửi đến & Lấy dữ liệu thông qua phương thức getStringExtra() Hiển thị dữ liệu ra textView 37
  59. Một ví dụ về Intent Viết code cho Activity_Two: ánh xạ công cụ và sử lý sự kiện cho nút lệnh trở về (btnBack) 37
  60. Một ví dụ về Intent 37
  61. Phần 7 Vòng đời của một activity 38
  62. Vòng đời của một activity ▪Các activity được quản lí trong một stack chứa activity (cơ chế vào trước ra sau): ▪ Khi ứng dụng được mở lên thì activity chính sẽ được tạo ra, nó sẽ được thêm vào đỉnh của stack ▪ Lúc này chỉ có duy nhất activity trên cùng là hiển thị nội dung đến người dùng ▪ Tất cả các activity còn lại đều chuyển về trạng thái dừng hoạt động ▪ Khi một activity bị đóng nó sẽ bị loại khỏi stack, activity nằm dưới đó sẽ chuyển từ trạng thái tạm dừng sang trạng thái hoạt động 39
  63. Các sự kiện trong vòng đời của APP ▪Khi một activity bị chuyển qua chuyển lại giữa các trạng thái, nó được cảnh báo việc chuyển này bằng hàm chuyển trạng thái (transition) ▪Có thể viết lại các hàm chuyển này nếu cần làm các công việc giúp việc chuyển trạng thái suôn sẻ 1. protected void onCreate(Bundle b); 2. protected void onStart(); 3. protected void onRestart(); 4. protected void onResume(); 5. protected void onPause(); 6. protected void onStop(); 7. protected void onDestroy(); 40
  64. Các hàm trong vòng đời activity ▪onCreate( ): gọi khi activity khởi tạo ▪onStart(): gọi khi acivity xuất hiện trên màn hình ▪onResume(): gọi ngay sau onStart hoặc người dùng focus, hàm này đưa ứng dụng lên top màn hình ▪onPause(): gọi khi hệ thống focus đến activity khác ▪onStop(): gọi khi activity bị che hoàn toàn ▪onRestart(): gọi khi ứng dụng khởi chạy lại ▪onDestroy(): gọi khi ứng dụng chuẩn bị được gỡ khỏi bộ nhớ 41
  65. Vòng đời của một activity ▪Một activity có bốn trạng thái: ▪ Active hay Running: activity đang chạy trên màn hình ▪ Paused: khi một activity mất focus nhưng vẫn đang chạy trên màn hình (một activity trong suốt hoặc một activity không chiếm toàn bộ màn hình thiết bị đè lên) ▪ Stopped: khi một activity bị che khuất hoàn toàn bởi một activity khác ▪ Killed hay Shutdown: khi một activity đang Paused hay Stopped, hệ thống có thể xóa activity ấy nếu cần (chẳng hạn như cần bộ nhớ vào việc khác) 42
  66. Vòng đời của một activity 43
  67. Ví dụ:Vòng đời của một activity Trở lại ví dụ trên - tiến hành tạo các hàm sau: protected void onStart() { super.onStart(); Log.i("lifeactivity","On Start");} protected void onRestart() { super.onRestart(); Log.i("lifeactivity","On Restart");} protected void onStop() { super.onStop(); Log.i("lifeactivity","On Stop");} protected void onPause() { super.onPause(); Log.i("lifeactivity","On Pause");} protected void onResume() { super.onResume(); Log.i("lifeactivity","On Resume");} protected void onDestroy() { super.onDestroy(); Log.i("lifeactivity","On Destroy");} 43
  68. Ví dụ:Vòng đời của một activity Thêm dòng lệnh: Log.i("lifeactivity","On Create");} vào hàm onCreate đã được tạo sẵn Giải thích thêm: - Logcat là một cơ chế hiển thị các dòng thông tin của hệ thống, gọi là các log, - Logcat hiển thị tất cả các thông tin một cách tức thời, giúp thuận tiện cho việc tìm kiếm và gỡ lỗi - Các hàm cụ thể của lớp Log này như sau. o v(String, String) in ra log dạng verbose. o d(String, String) in ra log dạng debug. o i(String, String) in ra log dạng information. o w(String, String) in ra log dạng warning. o e(String, String) in ra log dạng error. 43
  69. Ví dụ:Vòng đời của một activity Giải thích thêm: o i(String1, String2) in ra log dạng information o String1 : giá trị tag dùng để phân biệt nhóm thông tin dùng để lọc thông tin o String2 : giá trị thông tin cần hiển thị 43
  70. Ví dụ:Vòng đời của một activity Trạng thái khi chưa thực thi ứng dụng 43
  71. Ví dụ:Vòng đời của một activity Trạng thái khi ứng dụng được thực thi Đang hiển thị lên màn hình người dùng 43
  72. Ví dụ:Vòng đời của một activity Trạng thái khi bấm nút home Giao diện ứng dụng ẩn đi – trở về màn hình trước đó 43
  73. Ví dụ:Vòng đời của một activity Trạng thái khi ứng dụng được gọi lại 43
  74. Ví dụ:Vòng đời của một activity Trạng thái khi bấm nút Thoát trên ứng dụng 43
  75. Thảo luận: Yêu cầu khảo sát vòng đời activity_two 43
  76. Bài tập Tạo ứng dụng theo yêu cầu sau: Activity 2: Activity 1: - nhận 2 số a & b từ Activity1 - Nhập vào 2 số a & b (Có kiểm tra - Hiển thị 2 số rổng) - Tính UCLN và BCNN và hiển thị Nút xử lý chuyển 2 số sang Activity2 Kết quả - Nút trở về quay lại Activity1 43