24

Tôi có một hoạt động với thanh ứng dụng và ngăn điều hướng. Thanh ứng dụng được triển khai bằng cách sử dụng lớp Thanh công cụ mới từ thư viện appcompat-v7 phiên bản 21. + và ngăn điều hướng được hiển thị ở phía trước nó.Làm cách nào để Thanh tab hành động theo ngữ cảnh phủ lên thanh công cụ appcompat-v7 nhưng không phải ngăn kéo điều hướng?

Hoạt động có chế độ xem danh sách với các mục có thể được chọn, vì vậy tôi đang hiển thị thanh tác vụ theo ngữ cảnh (CAB). Nó được bắt đầu bằng cách gọi:

ActionBarActivity.startSupportActionMode(android.support.v7.view.ActionMode.Callback callback) 

Theo mặc định, CAB được chèn trên thanh công cụ thay vì phủ nó; có vẻ như CAB sẽ chỉ che phủ ActionBar đúng theo mặc định. Như hiển thị trong this answer, CAB phủ lên một cách chính xác Toolbar khi sở hữu chủ đề này được thiết lập:

<item name="windowActionModeOverlay">true</item> 

Nhưng điều này cũng làm cho lớp phủ CAB điều hướng ngăn kéo, đó là không chính xác theo the Material design specs. Các tài liệu thiết kế của Android chính still recommend ẩn CAB khi ngăn điều hướng được mở ra và hiển thị nó một lần nữa khi đóng cửa, và this could be done để "sửa chữa" các vấn đề, nhưng nó không phải là cần thiết. Như đã viết, các đặc tả thiết kế Material design không xác định rằng CAB nên được ẩn khi ngăn nav mở ra, và vì ngăn điều hướng nên mở trên CAB, việc ẩn CAB thực tế sẽ là một sự phân tâm thị giác.

Có cách nào để hiển thị ngăn điều hướng ở phía trước CAB trong khi vẫn giữ nó che phủ Thanh công cụ không?

Trả lời

1

tôi có thể đã tìm thấy một giải pháp - hoặc có lẽ một workaround đơn giản.
Tôi đã có cùng một vấn đề ngay cả với một ListFragment, khi startActionMode() được sử dụng thay vì được xây dựng trong setChoiceMode(). Vì vậy, tôi nhìn vào mã ListFragment và tôi thấy rằng startActionMode() không được gọi trên hoạt động mà là trên ListView của nó, vì vậy tôi đã thử sử dụng một khung nhìn. Trong mã của tôi bây giờ nó dường như làm việc như mong đợi bằng cách sử dụng các ListView đoạn:

ActionMode mActionMode = getListView().startActionMode(this); 

hoặc sử dụng container Hoạt động có chứa đoạn của tôi:

View aView = getActivity().findViewById(R.id.container); 
ActionMode mActionMode = aView.startActionMode(this); 

Ngoài ra:

  • nay là nút quay lại phá hủy chế độ hành động trong khi trước đó không phải
  • CAB hiện bao gồm đúng Thanh tác vụ trong khi đang sử dụng g windowActionModeOverlay trong phong cách của tôi đã được bao gồm chỉ một phần của nó - ít nhất là trong trường hợp của tôi
  • vào biểu tượng CAB là mũi tên lùi lại chứ không phải là một đánh dấu - không chắc chắn điều này có nghĩa dù

Thành thật mà nói tôi không chắc chắn về những lý do đằng sau này, vì vậy tôi không chắc chắn làm thế nào an toàn các giải pháp này là, tuy nhiên trong thời gian này dường như làm việc tốt.
Nếu có ai hiểu rõ hơn, vui lòng bình luận hoặc chỉnh sửa.

+3

Tôi đang sử dụng RecyclerView thay vì một ListView. Ít nhất trong trường hợp này, điều này đã không hoạt động. CAB vẫn nằm trong ngăn kéo của tôi. –

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