2010-05-28 22 views
7

Tôi đang cố gắng triển khai menu ở chân của ứng dụng, tương tự như ứng dụng Engadget. Theo tôi hiểu, việc nhận một TabLayout chuẩn để hoạt động theo cách này không phải là tầm thường (nếu có thể?).Cách tốt nhất để sử dụng lại menu chân trang trong Android

Như tôi thấy một số ứng dụng sử dụng mô hình giao diện này, tôi cho rằng có một cách thông minh để thực hiện nó. Hiện tại, tôi đang xác định bố cục bằng cách thêm dòng bao gồm ở cuối mỗi bố cục. Điều này làm việc tốt như xa như rendering là có liên quan, nhưng tôi phải thêm onClickListeners cho mỗi hoạt động. chúng ta có thể định nghĩa clickListener thông qua XML không?

Để tổng hợp câu hỏi của tôi: Cách tốt nhất để triển khai điều hướng chân trang được chia sẻ qua một số Hoạt động là gì?

Trả lời

7

Bạn có thể thực hiện tất cả các hoạt động của mình xuất phát từ một lớp cơ sở chung mở rộng Hoạt động và đặt một phương thức trong đó để xây dựng trình đơn. Sử dụng RelativeLayout làm vùng chứa chính, gắn LinearLayout nằm ngang ở dưới cùng (layout_alignParentBottom = "true"), và sắp xếp vùng chứa "nội dung" chính của bạn (bất kỳ kiểu bố cục nào bạn muốn cho hoạt động cụ thể) ở trên đó. Sử dụng android: trọng lượng trên bất kỳ thứ gì bạn đặt trong menu của mình (ví dụ: ImageButton) và sau đó android: weightSum trên vùng chứa của menu, chúng sẽ được đặt cách đều nhau. Vì vậy, nếu bạn có bốn ImageButtons với android: weight = "1" và LinearLayout chứa chúng có android: weightSum = "4", bạn nên là tốt.

Vì vậy, TabContentActivity có thể mở rộng Hoạt động và sau đó tất cả các hoạt động cụ thể của bạn mở rộng TabContentActivity. TabContentActivity có một onCreate gọi super.onCreate và sau đó gọi một số phương thức riêng để xây dựng menu. Sau đó, khi các lớp học có nguồn gốc của bạn gọi super.onCreate inCreate của riêng mình, "tab" của bạn được tạo. Bạn có thể có một Enum trong TabContentActivity đại diện cho mỗi tab với một biến cục bộ của kiểu Enum đó để quyết định tab nào được đánh dấu.

Đừng nghe những người bảo bạn không làm theo cách đó. Nếu đó là giao diện người dùng bạn muốn, không bị hạn chế bởi môi trường bạn đang làm việc. Cũng giống như bạn có câu trả lời cho bạn biết đó không phải là "đúng cách để làm điều đó trong Android", bạn hiện cũng có hai phiếu bầu.

0

Dưới đây là một shot dài và tôi chưa bao giờ thử nó để xem nếu nó hoạt động:

  • Tạo một lớp học đặc biệt, trong đó có onClick phương pháp cho các yếu tố trong chân của bạn. import lớp học này trong mỗi Activity bạn có;
  • Sử dụng android:onClick trong tệp XML được bao gồm của bạn với các giá trị trỏ đến các phương thức trong lớp đó.

Bây giờ, tôi không chắc chắn cho dù lớp này sẽ cần phải được thuyết minh trong mỗi Activity hoặc nếu bạn có thể sử dụng phương pháp của nó như là tĩnh, nhưng một cái gì đó như thế này nên làm việc và nó vẫn còn tốt hơn so với việc thêm các thính giả để mỗi Hoạt động.


Theo ý kiến ​​của tôi (và tôi nhấn mạnh rằng đó chỉ là ý kiến ​​của tôi), mô hình giao diện này mà bạn gọi là nỗ lực sao chép iPhone kém. Mô hình này rất phổ biến trên iPhone, chủ yếu là vì nó chỉ có một nút. Tôi thậm chí ghét ứng dụng Engadget để làm điều đó (và một lần nữa, nó được sao chép từ ứng dụng iPhone) - nó lãng phí màn hình bất động sản.

Tóm lại, lời khuyên của tôi:use the MENU button.


lưu ý cuối: không bao giờ chơi xung quanh với một TabLayout, nhưng nếu bạn muốn có một riêng biệt Activity trong mỗi tab thì tôi 99,9% chắc chắn bạn không thể làm điều đó (bạn không thể nhúng toàn bộ các hoạt động trong bất kỳ loại View hoặc ViewGroup). Các TabLayout chỉ nhà con Layout s, không phải hoạt động. Ngoài ra, với số TabLayout, bạn có thể nói tạm biệt với nút BACK (bạn sẽ lãng phí chưa một nút khác để sao chép giao diện người dùng từ iPhone?) - trừ khi bạn định ghi đè nó, trong trường hợp này có thể nói tạm biệt với người dùng của bạn.

+0

Sai. TabLayout có thể có một hoạt động riêng biệt trong mỗi tab và tôi có một ứng dụng trên thị trường. – Rich

+0

Vì vậy, bạn có thể có nhiều hoạt động hoạt động trên màn hình cùng một lúc? Có một số loại ViewGroup có thể giữ trẻ hoạt động không? Nếu bạn nói đúng, thì đó sẽ là cách để đi, mặc dù tôi vẫn nghĩ rằng việc sử dụng các menu tốt hơn, cho không gian màn hình nếu không phải cho bất cứ điều gì khác. – Felix

0

Không chắc chắn nếu ý tưởng này là hoàn toàn khả thi,

Đặt một TabLayout1 trên chân, nhưng thiết lập nó để chỉ các tab có thể nhìn thấy, không phải là nội dung (mà sẽ đi dưới chân, trong một không gian vô hình) .
Sau đó, có Chế độ xem thứ hai trên phần còn lại của màn hình và bạn có thể chuyển đổi chế độ xem ở đó. Nếu bạn đặt bố cục thứ hai (trên cùng) làm tabLayout2 và liên kết các tab với Hoạt động, bạn có thể chia sẻ chế độ xem này trên các hoạt động. Cũng lưu ý rằng bạn phải thiết lập TabLayout2 ở trên cùng theo cách mà các tab không hiển thị chỉ khu vực nội dung hiển thị. Tôi nghĩ rằng với một số đệm có thể được giải quyết.

+0

Âm thanh giống như tổng số hack. Tôi đồng ý rằng nó * có thể * hoạt động, nhưng điều đó không thay đổi trạng thái hack của nó. Ngoài ra, việc khởi chạy một hoạt động mới khi nhấp vào một tab có vẻ .. không thân thiện với người dùng. Tôi ghét một ứng dụng như vậy. Và trên hết, việc định vị 'TabLayout' vừa đúng sẽ là một cơn ác mộng, đặc biệt là xem xét sự đa dạng của màn hình và mật độ mà Android hỗ trợ. – Felix

+0

Khởi chạy một hoạt động mới khi nhấp vào một tab đã được tích hợp sẵn và bạn có thể sử dụng nó rất đơn giản. – Pentium10

Các vấn đề liên quan