| page.title=Điều hướng bằng Quay lại và Lên trên |
| page.tags="navigation","activity","task","up navigation","back navigation" |
| page.image=/design/media/navigation_between_siblings_gmail.png |
| @jd:body |
| |
| <a class="notice-developers" href="{@docRoot}training/implementing-navigation/index.html"> |
| <div> |
| <h3>Tài liệu cho Nhà phát triển</h3> |
| <p>Triển khai Điều hướng Hiệu quả</p> |
| </div> |
| </a> |
| |
| <p itemprop="description">Điều hướng nhất quán là một thành phần thiết yếu trong trải nghiệm người dùng nói chung. Một vài điều nhỏ bé lại khiến |
| người dùng khó chịu hơn so với điều hướng cơ bản chính là hành xử không nhất quán và không như kỳ vọng. Android 3.0 |
| đã giới thiệu những thay đổi đáng kể về hành vi điều hướng toàn cục. Tuân thủ kỹ lưỡng các hướng dẫn |
| về Quay lại và Lên trên sẽ giúp việc điều hướng trên ứng dụng của bạn trở nên dễ đoán và đáng tin cậy cho người dùng của bạn.</p> |
| <p>Phiên bản Android 2.3 và mới hơn dựa vào nút <em>Quay lại</em> của hệ thống để hỗ trợ điều hướng trong một |
| ứng dụng. Với việc giới thiệu thanh hành động trong Android 3.0, một cơ chế điều hướng thứ hai đã xuất hiện: |
| nút <em>Lên trên</em>, bao gồm biểu tượng ứng dụng và dấu nháy lùi trái.</p> |
| |
| <img src="{@docRoot}design/media/navigation_with_back_and_up.png"> |
| |
| <h2 id="up-vs-back">Lên trên so với Quay lại</h2> |
| |
| <p>Nút Lên trên được sử dụng để điều hướng bên trong một ứng dụng dựa trên mối quan hệ thứ bậc |
| giữa các màn hình. Ví dụ, nếu màn hình A hiển thị một danh sách các mục và việc chọn một mục sẽ dẫn đến |
| màn hình B (trình bày chi tiết hơn về mục đó), khi đó B sẽ đưa ra nút Lên trên để |
| quay lại màn hình A.</p> |
| <p>Nếu một màn hình đang ở trên cùng trong một ứng dụng (cụ thể là trang chủ của ứng dụng), thì nó sẽ xuất hiện nút |
| Lên trên.</p> |
| |
| <p>Nút Quay lại của hệ thống được sử dụng để điều hướng ngược theo thứ tự thời gian, qua lịch sử các màn hình |
| mà người dùng mới thao tác qua. Nó thường được dựa trên mối quan hệ thời gian |
| giữa các màn hình thay vì thứ bậc của ứng dụng.</p> |
| |
| <p>Khi màn hình xem trước đó cũng đồng thời là màn hình mẹ theo thứ bậc của màn hình hiện tại, nhấn nút |
| Quay lại sẽ có cùng kết quả như khi nhấn nút Lên trên—điều này thường hay |
| xảy ra. Tuy nhiên, không như nút Lên trên đảm bảo người dùng vẫn còn trong ứng dụng của bạn, |
| nút Quay lại có thể trả người dùng về màn hình Trang chủ hoặc thậm chí sang một ứng dụng khác.</p> |
| |
| <img src="{@docRoot}design/media/navigation_up_vs_back_gmail.png"> |
| |
| <p>Nút Quay lại cũng hỗ trợ một vài hành vi không trực tiếp gắn với điều hướng giữa các màn hình: |
| </p> |
| <ul> |
| <li>Bỏ qua cửa sổ nổi (hộp thoại, cửa sổ bật lên)</li> |
| <li>Bỏ qua thanh hành động ngữ cảnh và bỏ tô sáng khỏi mục đã chọn</li> |
| <li>Ẩn bàn phím trên màn hình (IME)</li> |
| </ul> |
| <h2 id="within-app">Điều hướng trong Ứng dụng của Bạn</h2> |
| |
| <h4>Điều hướng tới màn hình với nhiều điểm bắt đầu</h4> |
| <p>Đôi khi một màn hình không chỉ có một vị trí cố định trong thứ bậc của ứng dụng và bạn có thể truy cập nó |
| từ nhiều điểm bắt đầu—ví dụ như màn hình cài đặt có thể được truy cập từ bất cứ màn hình |
| nào khác trong ứng dụng của bạn. Trong trường hợp này, nút Lên trên sẽ chọn quay lại màn hình đã chuyển đến, có tác dụng |
| giống như Quay lại.</p> |
| <h4>Thay đổi dạng xem bên trong một màn hình</h4> |
| <p>Thay đổi tùy chọn dạng xem cho một màn hình không làm thay đổi hành vi Lên trên hay Quay lại: màn hình vẫn |
| ở cùng một chỗ trong thứ bậc của ứng dụng và không tạo thêm lịch sử điều hướng mới nào.</p> |
| <p>Ví dụ về thay đổi dạng xem gồm:</p> |
| <ul> |
| <li>Chuyển dạng xem bằng tab và/hoặc trượt nhanh trái phải</li> |
| <li>Chuyển dạng xem bằng danh sách thả xuống (còn gọi là tab thu gọn)</li> |
| <li>Lọc một danh sách</li> |
| <li>Sắp xếp một danh sách</li> |
| <li>Thay đổi đặc tính hiển thị (như thu phóng)</li> |
| </ul> |
| <h4>Điều hướng giữa các màn hình anh em</h4> |
| <p>Khi ứng dụng của bạn hỗ trợ điều hướng từ một danh mục tới một dạng xem chi tiết của một trong những mục đó, thường |
| nó ưu tiên hỗ trợ điều hướng theo hướng từ mục đó tới một mục khác ở phía trước hoặc |
| phía sau nó trong danh sách. Ví dụ, trong Gmail, bạn có thể dễ dàng trượt nhanh sang trái hoặc phải từ một hội thoại |
| để xem hội thoại mới hơn hoặc cũ hơn trong cùng Hộp thư đến. Như khi thay đổi dạng xem trong một màn hình, |
| điều hướng đó không làm thay đổi hành vi Lên trên hoặc Quay lại.</p> |
| |
| <img src="{@docRoot}design/media/navigation_between_siblings_gmail.png"> |
| |
| <p>Tuy nhiên, có một trường hợp ngoại lệ đáng chú ý đó là khi duyệt giữa các dạng xem chi tiết có liên quan, không |
| ràng buộc với nhau bởi danh sách chuyển đến—ví dụ như khi duyệt trong Play Store giữa các ứng dụng từ |
| cùng một nhà phát triển hoặc giữa các album bởi cùng một nghệ sĩ. Trong các trường hợp này, truy cập vào từng liên kết không tạo ra |
| lịch sử, khiến nút Quay lại đi qua từng màn hình được xem trước đó. Thao tác Lên trên sẽ tiếp tục |
| bỏ qua những màn hình liên quan này và điều hướng tới màn hình bộ chứa được xem gần đây nhất.</p> |
| |
| <img src="{@docRoot}design/media/navigation_between_siblings_market1.png"> |
| |
| <p>Bạn có khả năng thiết kế để hành vi Lên trên thông minh hơn dựa trên hiểu biết của mình về dạng xem |
| chi tiết. Suy rộng từ ví dụ về Play Store bên trên, tưởng tượng người dùng đã điều hướng từ |
| Cuốn sách xem gần nhất tới chi tiết chuyển thể Phim. Trong trường hợp đó, thao tác Lên trên có thể trả về một bộ chứa |
| (Phim) mà trước đó người dùng chưa điều hướng qua.</p> |
| |
| <img src="{@docRoot}design/media/navigation_between_siblings_market2.png"> |
| |
| <h2 id="into-your-app">Điều hướng tới Ứng dụng của Bạn thông qua Widget và Thông báo trên Màn hình Trang chủ</h2> |
| |
| <p>Bạn có thể sử dụng widget hoặc thông báo trên màn hình Trang chủ để giúp người dùng của mình điều hướng trực tiếp tới màn hình |
| nằm sâu trong thứ bậc ứng dụng của bạn. Ví dụ, widget Hộp thư đến của Gmail và thông báo thư mới có thể |
| vừa bỏ qua màn hình Hộp thư đến, vừa đưa người dùng trực tiếp tới dạng xem hội thoại.</p> |
| |
| <p>Trong cả hai trường hợp này, hãy điều khiển nút Lên trên như sau:</p> |
| |
| <ul> |
| <li><em>Nếu màn hình đích thường được truy cập từ một màn hình cụ thể trong ứng dụng |
| của bạn</em>, thao tác Lên trên sẽ điều hướng tới màn hình đó.</li> |
| <li><em>Nếu không</em>, thao tác Lên trên sẽ điều hướng tới màn hình trên cùng ("Trang chủ") của ứng dụng của bạn.</li> |
| </ul> |
| |
| <p>Trong trường hợp nút Quay lại, bạn nên thiết kế để việc điều hướng dễ đoán hơn bằng cách chèn vào ngăn xếp |
| của tác vụ toàn bộ đường dẫn điều hướng lên trên tới màn hình trên cùng của ứng dụng. Làm vậy sẽ cho phép những người dùng nào |
| quên cách họ vào ứng dụng của bạn sẽ điều hướng tới màn hình trên cùng của ứng dụng trước khi |
| thoát.</p> |
| |
| <p>Ví dụ, widget màn hình Trang chủ của Gmail có một nút để đi trực tiếp vào màn hình |
| soạn email của nó. Lên hoặc Quay lại từ màn hình soạn thư sẽ đưa người dùng tới Hộp thư đến, và từ đó |
| nút Quay lại tiếp tục đưa về Trang chủ.</p> |
| |
| <img src="{@docRoot}design/media/navigation_from_outside_back.png"> |
| |
| <h4>Thông báo gián tiếp</h4> |
| |
| <p>Khi ứng dụng của bạn cần trình bày thông tin về nhiều sự kiện đồng thời, nó có thể sử dụng |
| thông báo duy nhất để chuyển hướng người dùng tới một màn hình xen kẽ. Màn hình này tổng hợp những sự kiện |
| này và cung cấp đường dẫn cho người dùng đi sâu vào ứng dụng. Thông báo kiểu này được gọi |
| là <em>thông báo gián tiếp</em>.</p> |
| |
| <p>Không như thông báo tiêu chuẩn (trực tiếp), nhấn Quay lại từ màn hình xen kẽ của một thông báo gián tiếp |
| sẽ trả người dùng về điểm mà từ đó thông báo đó được kích hoạt—không có |
| màn hình bổ sung nào được chèn vào ngăn xếp. Sau khi người dùng tiến vào ứng dụng từ màn hình xen kẽ |
| , thao tác Lên trên và Quay lại có tác dụng như với thông báo tiêu chuẩn, như được mô tả ở trên: |
| điều hướng bên trong ứng dụng thay vì quay lại màn hình xen kẽ.</p> |
| |
| <p>Ví dụ, giả sử một người dùng trong Gmail nhận được một thông báo gián tiếp từ Lịch. Chạm |
| vào thông báo này để mở ra màn hình xen kẽ, trong đó hiển thị nhắc nhở cho một vài sự kiện |
| khác nhau. Chạm vào Quay lại từ màn hình xen kẽ sẽ trả người dùng về Gmail. Chạm vào một sự kiện |
| cụ thể sẽ đưa người dùng ra khỏi màn hình xen kẽ và vào ứng dụng Lịch để hiển thị chi tiết về |
| sự kiện. Từ chi tiết sự kiện, Lên trên và Quay lại sẽ điều hướng tới dạng xem trên cùng của Lịch.</p> |
| |
| <img src="{@docRoot}design/media/navigation_indirect_notification.png"> |
| |
| <h4>Thông báo bật lên</h4> |
| |
| <p><em>Thông báo bật lên</em> sẽ bỏ qua ngăn thông báo thay vì xuất hiện trực tiếp phía |
| trước người dùng. Chúng hiếm khi được sử dụng và <strong>nên được để dành cho những dịp khi cần |
| phản ứng kịp thời và việc gián đoạn ngữ cảnh của người dùng là cần thiết</strong>. Ví dụ, |
| Talk sử dụng kiểu này để cảnh báo người dùng về lời mời từ một người bạn để tham gia trò chuyện video, bởi |
| lời mời này sẽ tự động hết hạn sau một vài giây.</p> |
| |
| <p>Xét về hành vi điều hướng, thông báo bật lên bám sát chặt chẽ hành vi của màn hình xen kẽ |
| trong thông báo gián tiếp. Quay lại sẽ bỏ qua thông báo bật lên. Nếu người dùng điều hướng |
| từ màn hình bật lên vào ứng dụng thông báo, hành vi Lên trên và Quay lại sẽ bám sát quy tắc áp dụng với thông báo tiêu chuẩn, |
| điều hướng bên trong ứng dụng.</p> |
| |
| <img src="{@docRoot}design/media/navigation_popup_notification.png"> |
| |
| <h2 id="between-apps">Điều hướng giữa các Ứng dụng</h2> |
| |
| <p>Một trong những thế mạnh cơ bản của hệ thống Android đó là khả năng các ứng dụng kích hoạt |
| lẫn nhau, giúp người dùng có thể điều hướng trực tiếp từ ứng dụng này sang ứng dụng khác. Ví dụ, một ứng dụng |
| cần chụp ảnh có thể kích hoạt ứng dụng Camera, ứng dụng này sẽ trả |
| ảnh về ứng dụng chuyển đến. Điều này đặc biệt có ích đối với cả nhà phát triển, những người có thể dễ dàng tận dụng |
| đoạn mã từ các ứng dụng khác, lẫn người dùng, những người thích có một trải nghiệm nhất quán đối với những hành động |
| được thực hiện thường xuyên.</p> |
| |
| <p>Để hiểu rõ điều hướng giữa các ứng dụng, quan trọng là phải hiểu được hành vi bộ khung Android |
| được đề cập dưới đây.</p> |
| |
| <h4>Hoạt động, tác vụ và ý định</h4> |
| |
| <p>Trong Android, <strong>hoạt động</strong> là một thành phần ứng dụng định nghĩa một màn hình |
| thông tin và tất cả hành động liên kết mà người dùng có thể thực hiện. Ứng dụng của bạn là tập hợp |
| của nhiều hoạt động, bao gồm cả hoạt động do bạn tạo và hoạt động mà bạn sử dụng lại từ các ứng dụng khác.</p> |
| |
| <p><strong>Tác vụ</strong> là trình tự các hoạt động mà một người dùng tuân theo để hoàn thành một mục tiêu. |
| Tác vụ đơn có thể sử dụng các hoạt động từ chỉ một ứng dụng, hoặc có thể dựa trên hoạt động từ nhiều |
| ứng dụng khác nhau.</p> |
| |
| <p><strong>Ý định</strong> là một cơ chế để một ứng dụng báo hiệu rằng nó muốn sự trợ giúp |
| của một ứng dụng khác khi thực hiện một hành động. Các hoạt động của một ứng dụng có thể biểu thị những ý định |
| mà chúng có thể phản hồi. Đối với những ý định thường gặp như "Chia sẻ", người dùng có thể cài đặt nhiều ứng dụng |
| có khả năng thực hiện yêu cầu đó.</p> |
| |
| <h4>Ví dụ: điều hướng giữa các ứng dụng để hỗ trợ chia sẻ</h4> |
| |
| <p>Để hiểu những hoạt động, tác vụ và ý định này vận hành với nhau như thế nào, hãy xem cách một ứng dụng cho phép người dùng |
| chia sẻ nội dung bằng cách dùng một ứng dụng khác. Ví dụ, khởi chạy ứng dụng Play Store từ Trang chủ sẽ bắt đầu |
| Tác vụ A mới (xem hình bên dưới). Sau khi điều hướng qua Play Store và chạm vào một cuốn sách được quảng cáo |
| để xem chi tiết của sách, người dùng vẫn ở trong cùng một tác vụ, mở rộng nó bằng cách thêm vào các hoạt động. Kích hoạt |
| hành động Chia sẻ sẽ nhắc người dùng bằng một hộp thoại liệt kê từng hoạt động một (từ các ứng dụng khác nhau) |
| mà đã đăng ký xử lý ý định Chia sẻ đó.</p> |
| |
| <img src="{@docRoot}design/media/navigation_between_apps_inward.png"> |
| |
| <p>Khi người dùng chọn chia sẻ qua Gmail, hoạt động soạn email của Gmail sẽ được thêm làm hoạt động tiếp tục |
| Tác vụ A—không có tác vụ mới nào được tạo thêm. Nếu Gmail có tác vụ riêng đang chạy nền, nó sẽ |
| không bị ảnh hưởng.</p> |
| |
| <p>Từ hoạt động soạn email, gửi thư hoặc chạm vào nút Quay lại sẽ trả người dùng về |
| hoạ̣t động chi tiết về cuốn sách. Những lần chạm sau đó vào Quay lại sẽ tiếp tục điều hướng quay lại qua |
| Store và cuối cùng về lại Trang chủ.</p> |
| |
| <img src="{@docRoot}design/media/navigation_between_apps_back.png"> |
| |
| <p>Tuy nhiên, nếu chạm vào Lên trên từ hoạt động soạn email, người dùng biểu thị mong muốn vẫn ở nguyên trong |
| Gmail. Hoạt động danh sách hội thoại của Gmail xuất hiện và Tác vụ B mới sẽ được tạo cho nó. Các tác vụ mới |
| sẽ luôn được liên kết gốc với Trang chủ, vì thế chạm vào Quay lại từ danh sách hội thoại sẽ quay lại đó.</p> |
| |
| <img src="{@docRoot}design/media/navigation_between_apps_up.png"> |
| |
| <p>Tác vụ A duy trì chạy nền và người dùng có thể quay lại nó sau (ví dụ, thông qua |
| màn hình Gần đây). Nếu Gmail đã có tác vụ riêng đang chạy nền, nó sẽ được thay thế |
| bằng Tác vụ B—ngữ cảnh trước đó sẽ bị bỏ đi phục vụ cho mục đích mới của người dùng.</p> |
| |
| <p>Khi ứng dụng của bạn đăng ký điều khiển ý định bằng một hoạt động nằm sâu trong thứ bậc của ứng dụng, |
| hãy tham khảo phần <a href="#into-your-app">Điều hướng tới Ứng dụng của Bạn thông qua Widget và Thông báo trên |
| Màn hình Trang chủ</a> để xem hướng dẫn về cách quy định điều hướng Lên trên.</p> |