intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Di động cho mọi người: Các hoạt động (Activities) và biểu tượng (icons) trong vòng đời ứng dụng Android

Chia sẻ: Ffsfff Thng | Ngày: | Loại File: PDF | Số trang:30

76
lượt xem
8
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Vòng đời của một Activity ánh xạ (maps) trực tiếp tới vòng đời của ứng dụng di động Android. Giống khi người dùng sử dụng ứng dụng của bạn hoặc thiết bị lưu trữ nó, nền tảng Android sẽ thực thi ngược trên một thể hiện Activity.

Chủ đề:
Lưu

Nội dung Text: Di động cho mọi người: Các hoạt động (Activities) và biểu tượng (icons) trong vòng đời ứng dụng Android

  1. Di động cho mọi người: Các hoạt động (Activities) và biểu tượng (icons) trong vòng đời ứng dụng Android của bạn
  2. Thêm điều hướng cá tính vào ứng dụng Android của bạn Lớp Activity chính là một khung màn hình công việc (workhouse) của ứng dụng di động, và nó cũng là nơi bạn có thể tinh chỉnh những tương tác của ứng dụng di động với người dùng. Giúp mọi thứ hoạt động chính xác theo cách mà bạn muốn trong vòng đời ứng dụng, sau đó sử dụng các biểu tượng (icon) và thanh hoạt động (Action-bar) hướng dẫn người dùng thông qua điều hướng giao diện người dùng (UI) và các tính năng khác của ứng dụng. Giới thiệu Vòng đời của lớp Activity Vòng đời của một Activity ánh xạ (maps) trực tiếp tới vòng đời của ứng dụng di động Android. Giống khi người dùng sử dụng ứng dụng của bạn hoặc thiết bị lưu trữ nó, nền tảng Android sẽ thực thi ngược trên một thể hiện Activity. Khi người dùng khởi động ứng dụng của bạn, một Activity đầu tiên thực thi định nghĩa vòng đời; nó thực thi các trạng thái khác nhau khi ứng dụng chạy nền, và những trạng thái khác nữa khi bị tắt. Hình 1 thể hiện mỗi trạng thái ứng với tương tác trong vòng đời của Activity.
  3. Hình 1. Vòng đời Activity của Android Vòng đời của ứng dụng di động Android gồm 4 trạng thái:  Khởi động (Start)  Tạm ngưng và tiếp tục (Pause and resume)  Dừng và khởi động lại (Stop and restart)  Hủy bỏ (Destroy) Tìm hiểu về từng giai đoạn và phương thức gọi của nó (mà bạn có thể thực hiện trong một thể hiện Activity) trong các phần tiếp theo. Giai đoạn Start trong vòng đời Activity Ứng dụng chạy thử (Demo) Nếu bạn đang làm theo hướng dẫn của loạt bài này, thì chắc hẳn bạn đã tạo ứng dụng demo trong bài đầu tiên và bài thứ hai. Nếu bạn chưa có ứng dụng demo, tôi
  4. khuyên bạn nên tạo một cái trước khi tiếp tục. Ngoài ra, bạn có thể sao chép các kho Git cho riêng ứng dụng demo Overheard Word của tôi (xem Tài nguyên). Trong bài viết trước, bạn đã sử dụng phương thức gọi lại tương ứng với việc bắt đầu một Activity, đó là onCreate. Bạn cũng có thể làm quen với onStart và onResume, hai phương thức bổ sung được gọi khi bắt đầu. Bây giờ hãy xem xét các phương thức trong phạm vi của vòng đời Activity. Trong môi trường phát triển Android của Eclipse, bạn có thể dễ dàng ghi đè các phương thức bằng cách chọn tùy chọn Override/Implement Methods Hình 2. Ghi đè các phương thức vòng đời Activity
  5. Tiếp theo, chọn cả hai phương thức onStart và onResume: Hình 3. Chọn một phương thức gọi Bây giờ sử dụng lớp Log của Android để tạo ra một số lời phát biểu, giống như tôi làm ở Liệt kê 1. Liệt kê 1. Thực hiện các phương thức gọi Activity của Android @Override protected void onResume() { super.onResume();
  6. Log.d("overheardword", "onResume Invoked"); } @Override protected void onStart() { super.onStart(); Log.d("overheardword", "onStart Invoked"); } Bạn có thể kiểm tra kết quả bằng cách xuất ra vài thể hiện và xem chúng trong Logcat, giống như Hình 4. Hình 4. Các thông tin debug của LogCat Ghi log Android với LogCat Android có hệ thống ghi log của riêng mình, android.util.Log. Với lớp tiện ích này, bạn có thể ghi log ở nhiều cấp độ khác nhau (chẳng hạn như info, warn, debug, v.v...) và xem các bản ghi thông qua công cụ logcat liên kết với Android SDK của bạn. Trong Eclipse, bạn sẽ thấy LogCat như một tab, mà bạn có thể sử dụng để lọc các thẻ (tag) và thậm chí là các thể hiện của ứng dụng. Logcat cũng cho phép bạn
  7. truy cập các bản ghi trên một thiết bị đơn giản bằng cách cắm thiết bị vào máy tính để bàn của bạn hoặc máy tính xách tay thông qua cổng USB. Như bạn có thể thấy, onCreate được gọi lần đầu tiên khi ứng dụng của bạn được nạp, trong khi onStart và onResume được sử dụng trong phạm vi của các giai đoạn khác, chẳng hạn như khi một ứng dụng được chạy nền và khởi động lại. Pause (tạm ngừng) và resume (tiếp tục) trong vòng đời Activity Bởi vì các thiết bị di động thường chứa nhiều ứng dụng, các ứng dụng này cạnh tranh với nhau theo nhiều cách để thu hút sự chú ý của người dùng, điều quan trọng là ứng dụng của bạn biết khi nào để một ứng dụng khác chiếm màn hình và sử dụng tài nguyên của thiết bị. Đôi khi người dùng sẽ cần phải thực hiện một cuộc gọi đến trong khi sử dụng ứng dụng của bạn, hoặc ứng dụng của bạn có thể đưa ra một hộp thoại pop-up như một yêu cầu thông tin hoặc thông báo lỗi. Hoặc hành động sẽ phần nào cản trở các Activity hiện tại. Khi một Activity bị che khuất một phần, phương thức onPause được gọi. Khi Activity tạm ngưng để lấy lại tiêu điểm, phương thức onResume được gọi. Mỗi phiên pause-and-resume (tạm-ngưng-và-tiếp-tục) có nghĩa là các Activity bị ảnh hưởng đã được che khuất một phần nhưng không hoàn toàn ẩn.
  8. Khi ứng dụng được ẩn hoàn toàn, chẳng hạn, khi người dùng có một cuộc gọi điện thoại, onPause cũng được gọi, nhưng trong trường hợp này nó được theo sau bởi onStop. Khi ứng dụng được khôi phục một lần nữa, onRestart được gọi, tiếp theo là onStart, và sau đó onResume. Hãy xem điều gì sẽ xảy ra khi bạn thực hiện onPause, onRestart, và onStop. Nếu bạn đã có một ứng dụng Android trong quá trình làm việc theo loạt bài này, hãy thêm một số thông báo vào mã của bạn và sau đó chạy nó. Bấm vào nút Home để ẩn hoàn toàn ứng dụng, và sau đó nhấn vào biểu tượng của ứng dụng để đưa nó trở lại. Đầu tiên, bạn sẽ thấy phương thức onPause theo sau bởi onStop. Khi bạn nhấn vào biểu tượng để gọi lại ứng dụng, bạn sẽ thấy phương thức onRestart theo sau bởi onStart, và sau đó là onResume. Việc hủy bỏ một Activity cũng là một điều gì đó bình thường trong quá trình chạy một ứng dụng. Ví dụ, bạn có thể là chấm dứt một thể hiện Activity bằng cách gọi phương thức finish của nó. Điều quan trọng ở đây là bởi vì một Activity đang được tắt, nó sẽ theo vòng đời giống như khi nó được ẩn, nhưng lời gọi cuối cùng của nó là phương thức onDestroy. Trong Liệt kê 2, tôi sử dụng ứng dụng Overheard Word (xem bài "Di động cho mọi người: Lập trình xử lý cử chỉ trong Android" hay lấy về tệp nguồn từ Github) để làm rõ cho quá trình này, bằng cách gọi phương thức finish khi vuốt lên.
  9. Liệt kê 2. Ví dụ hủy bỏ một Activity public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { try { final SwipeDetector detector = new SwipeDetector(e1, e2, velocityX, velocityY); if (detector.isDownSwipe()) { return false; }else if (detector.isUpSwipe()) { finish(); }else if (detector.isLeftSwipe()) { Toast.makeText(getApplicationContext(), "Left Swipe", Toast.LENGTH_SHORT).show(); }else if (detector.isRightSwipe()) { Toast.makeText(getApplicationContext(), "Right Swipe", Toast.LENGTH_SHORT).show(); } } catch (Exception e) { // nothing }
  10. return false; } Các phương thức vòng đời Activity mà bạn dùng nhiều là onCreate, onRestart, và onDestroy. Ví dụ, tôi đã dùng onRestart để làm mới khía cạnh khung nhìn giao diện người dùng của ứng dụng và phương thức onDestroy để phát hành kết nối đến một cơ sở dữ liệu như SQLite chạy cục bộ trên các thiết bị Android. Có thể nó chưa rõ ràng, nhưng một khi bạn bắt đầu làm việc với các mã nguồn bên ngoài — chẳng hạn như các dịch vụ web bên ngoài hoặc hệ thống tập tin của thiết bị hoặc cơ sở dữ liệu — các giai đoạn vòng đời này sẽ trở nên cực kỳ quan trọng. Tiếp theo chúng ta hãy xem những gì sẽ xảy ra khi chúng ta sử dụng hai phương thức móc Activity—onCreateOptionsMenu và onOptionsItemSelected— để thực hiện hành vi Thực đơn (Menu) của ứng dụng. Một khi chúng ta có được hai phương thức đồng bộ, chúng ta sẽ liên kết tính năng của nó với các biểu tượng giao diện người dùng pizazz. Chuyển hướng với Menu và Action Khi tôi tạo ra dự án Overheard Word trong Eclipse, phương thức Activity đầu tiên mà tôi định nghĩa là onCreateOptionsMenu. Như bạn có thể đoán, phương thức này tạo ra một Menu tùy chọn. Trên các thiết bị Android cũ, Menu tùy chọn được
  11. đại diện bởi nút Menu. Trên các thiết bị mới hơn, nó được biểu diễn như là một loạt các dấu chấm theo chiều dọc, được hiển thị riêng trong những ứng dụng. Các thiết bị Android mới hơn không cần phải có một nút Menu. Trong trình giả lập của một thiết bị cũ, bạn sẽ thấy một nút trên là "Menu". Bằng cách nhấn vào nó, một thể hiện của ứng dụng sẽ hiển thị một Menu tùy chọn. Trong trường hợp này, chúng tôi sẽ xem xét các tùy chọn cho việc điều hướng. Ví dụ, nếu người dùng nhấn vào nút Home, anh ta sẽ thấy thông tin giống như thể hiện ở Hình 5.
  12. Hình 5. Một Menu chưa được thực hiện Trên máy tính bảng không có nút Menu. Thay vì lựa chọn các mục từ menu (thanh thực đơn), người dùng được hỏi để thực hiện các actions (hành động) khác nhau. Giao diện người dùng mới này được gọi là Action-bar (thanh hành động), được hiển thị trong Hình 6.
  13. Hình 6. Action-bar mới của Android Nút Menu và Action-bar hoạt động như nhau, Action-bar được dùng trên nhiều thiết bị mới hơn. Vì mục tiêu của chúng ta là đang phát triển trên phiên bản Android cũ hơn (hãy nhớ lại rằng hơn 50% thiết bị Android chạy Gingerbread!), tôi sẽ sử dụng nút Menu quen thuộc cho mục đích minh họa. Sau đó, tôi sẽ chỉ bạn các cập nhật mã định hướng để dùng Action-bar, trong trường hợp bạn muốn viết ứng dụng cho các thiết bị Android phiên bản mới hơn. Tạo một Menu tùy chọn Bước đầu tiên để trang bị cho Overhead Word một giao diện người dùng tương tác hiệu quả hơn là việc sử dụng một Menu tùy chọn cho phép người dùng thoát ứng
  14. dụng. Thoát ứng dụng là một giai đoạn của vòng đời Activity, vì vậy chúng tôi sẽ dùng các phương thức Activity để thực hiện chức năng này. Hãy nhớ rằng tất cả mọi thứ liên quan đến giao diện người dùng trong một ứng dụng Android ứng với một tập tin XML, vì vậy chỉnh sửa tập tin XML chính là cách bạn tạo ra giao diện người dùng. Các tập tin XML của ứng dụng Android nằm trong thư mục tương ứng trong thư mục res của dự án (ví dụ, tập tin layout nằm trong thư mục layout). Một bài tập nhanh, hãy nhìn vào thực thi mặc định của phương thức onCreateOptionsMenu trong hoạt động chính của Overheard Word — bạn thấy được gì từ những dòng mã? public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.overheard_word, menu); return true; } Nếu bạn đang nghĩ rằng bạn sẽ phải tìm một tập tin XML có tên overheard_word.xml trong thư mục nguồn menu, thì bạn đang trên đường trở thành một chuyên gia Android rồi đấy!
  15. I... Quit! (Tôi... thoát!) Tiếp theo, hãy chỉnh sửa tập tin mã nguồn XML của Menu để thêm vào một mục quit. Bắt đầu bằng cách tìm tập tin strings.xml trong thư mục res/values. Sau đó tạo một dòng như bên dưới: Quit Dòng này tạo ra từ Quit tham chiếu đến định danh quit_menu (bằng cách này, ta có thể tạo điều kiện để đa ngôn ngữ hóa ứng dụng sau này). Tiếp theo, mở tệp overheard_word.xml trong thư mục menu. Trong tệp đó, ta thay đổi tiêu đề thành @string/quit_menu, như vậy ta đã liên kết từ Quit với mục của Menu. Bây giờ hãy khởi động trình giả lập và nhấn vào nút Menu. Bạn sẽ thấy một Menu xuất hiện ở dưới cùng của màn hình với một tùy chọn: Quit. Tuy nhiên nếu bạn nhấn chọn nó thì cũng chưa có gì xảy ra cả bởi vì ta vẫn chưa làm gì với nó. Chúng ta sẽ thêm mã thực thi cho tùy chọn Quit trong một phút. Nhưng trước tiên, hãy xem xét một yếu tốt quan trọng khác của bất kỳ chức năng của ứng dụng, đó là cảm giác nhìn nhận của mình. Bạn có thể thấy rất nhiều giao diện người dùng di động hiện nay (thậm chí cả những ứng dụng Web ngày càng đầu tư vào diện người dùng) sử dụng những biểu tượng để điều hướng. Hãy xem những gì sẽ xảy ra khi chúng ta thay thế các nút có tên chung chung sang một biểu tượng tự do.
  16. Các biểu tượng (icon) trong thiết kế giao diện người dùng Trước khi tôi bước vào lĩnh vực phát triển di động, tôi cũng đã thiết kế các biểu tượng, nhưng hiếm khi sử dụng chúng trong các ứng dụng thương mại của tôi. Khi các ứng dụng Web trở nên tương tác hơn thì tôi sử dụng biểu tượng nhiều hơn. Tuy nhiên đó cũng vẫn chưa phải lúc cho đến khi tôi bước vào lĩnh vực di động, đó mới thật sự là mối quan tâm của tôi. Biểu tượng của tôi ở đâu? Ngày nay thật dễ dàng để tìm các biểu tượng để dùng tự do trong các ứng dụng thương mại và nguồn mở. Bạn cũng có thể trả một chi phí nhỏ để mua các biểu tượng mà bạn cần. Tôi có tạo ra một gói biểu tượng gọi là Glyphish (xem Tài nguyên), chứa hàng trăm biểu tượng với mức giá hợp lý. Glyphish cũng cung cấp một giấy phép miễn phí. Hãy dùng tính năng tìm kiếm để tìm các biểu tượng phù hợp mà bạn muốn trong phần này. Nếu bạn sử dụng các biểu tượng trong việc thiết kế giao diện người dùng di động cho Android, bạn cần phải nắm thật kỹ về độ phân giải màn hình của thiết bị. Bởi hệ sinh thái Android là vô cùng lớn, ứng dụng của bạn có thể chạy trên hàng loạt các thiết bị, từ thiết bị có màn hình nhỏ với độ phân giải thấp đến những máy tính
  17. bảng có độ phân giải cao với màn hình 7-inch. Một biểu tượng hiển thị tốt trên một thiết bị cầm tay có thể bị vỡ trên máy tính bảng. Thật may mắn là bạn có thể điều khiển hình dạng của các biểu tượng ứng dụng trong các thiết bị khác nhau. Hãy xem trong thư mục res trong ứng dụng Android của bạn. Bạn sẽ thấy một vài thư mục có tên là drawable-something-pdi (trong đó "something" là một loạt các ký tự). Các thư mục này tương ứng với các độ phân giải màn hình thiết bị. Đặt biểu tượng đúng kích cỡ và các tập tin hình ảnh khác trong các thư mục này sẽ đảm bảo rằng các biểu tượng hiển thị chính xác trên các loại thiết bị khác nhau. Ví dụ, đối với thiết bị độ phân giải siêu cao, Android sẽ tìm các biểu tượng trong thư mục drawable-xxhdpi. Một biểu tượng trong thư mục này phải có độ phân giải là 96 x 96 pixels và ít nhất là 320 dpi. Một biểu tượng trong thư mục drawable-ldpi phải là 36 x 26 pixels và 120 dpi. Bạn cũng có tùy chọn để tạo ra một thư mục drawable mặc định mà Android sẽ sử dụng nếu nó không tìm thấy tập tin có độ phân giải tương ứng. Để đơn giản, tôi sẽ tạo ra một thư mục drawable trong ứng dụng Overheard Word. Trong đó, tôi sẽ đặt một biểu tượng có kích thước 26 x 26 (a .png) để dùng cho tùy chọn thoát (Quit).
  18. Hình 7. Thêm một biểu tượng vào thư mục drawable Tiếp theo, tôi tham chiếu đến biểu tượng trong Menu tùy chọn của tôi, bằng cách cập nhật các mục menu trong tập tin overheard_word.xml như bên dưới: android:icon="@drawable/quit_icon"
  19. Nếu bạn đang cùng làm với tôi thì bạn nên cập nhật id của phần tử như bên dưới. Cung cấp cho nó một giá trị chuỗi mô tả: android:id="@+id/quit_item" Việc có một mô tả, một chuỗi giá trị dễ hiểu sẽ giúp ích rất nhiều cho chúng ta trong các bước tiếp theo để thực hiện hành động thoát bên trong phương thức onOptionsItemSelected. Chúng ta có thể tham khảo các mục Menu trong trường hợp lựa chọn, thông qua ID của quit_item. Ngay bây giờ, hãy mở trình giả lập của bạn lên và nhấn vào Menu. Tôi nghĩ bạn sẽ thích những gì bạn thấy!
  20. Hình 8. Biểu tượng tuyệt đẹp! (Courtesy của Glyphish) Thực hiện các hành vi của Menu Bây giờ tôi đã có một biểu tượng đẹp đẽ cho nút Quit (và tôi hy vọng bạn cũng có một cái tương tự cho ứng dụng của bạn), tuy nhiên tôi cần phải viết thêm mã để nói cho ứng dụng biết cần phải làm gì khi nút Quit được nhấn.
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2