Trong ứng dụng của tôi, tôi có giao diện tương tự với nhãn trong giao diện người dùng ứng dụng Gmail. Đối với những người có thể không biết, họ trông như thế này (các nhãn là những thanh đầy màu sắc): BackgroundColorSpan với phần đệm bổ sung, dọc
Để đạt được hiệu ứng tương tự, tôi sử dụng bản vẽ chín bản vá - cho mỗi nhãn Tôi tạo TextView và gán cho nó . Đây là giải pháp đơn giản, nhưng tôi không thích nó. Nó không phải là thanh lịch, nó là khá chậm như được hiển thị bởi profiler, và tôi chỉ không nghĩ rằng đó là đúng cách để làm điều đó.
Tôi đã thay đổi thiết kế giao diện người dùng để biến nó thành "ICS-y", vì vậy tôi đã xóa các góc được làm tròn khỏi các nhãn. Và tôi bắt đầu suy nghĩ làm thế nào tôi có thể thay thế giải pháp 9-patch. Điều rõ ràng nhất là sử dụng BackgroundColorSpan. Nhưng nó có một nhược điểm nhỏ. Tôi muốn các nhãn của tôi có một số đệm. Với drawables, nó đã được dễ dàng để đạt được. Với nhịp, nó khó hơn. Để tạo vùng đệm ngang, tôi chỉ có thể thêm dấu cách ở đầu và cuối chuỗi. Nhưng làm thế nào để làm cho đệm dọc lớn hơn? Để xóa mọi thứ lên, đây là một ảnh chụp màn hình của nhãn với BackgroundColorSpan:
Tôi muốn làm cho những phần màu trên và dưới văn bản lớn hơn. Tôi nghĩ rằng tôi nên sử dụng một số loại MetricAffectingSpan, nhưng tôi không thể tìm ra cái nào. Hoặc có lẽ tôi nên viết của riêng tôi? Hoặc, cuối cùng, có thể kéo dài chỉ là không thể đáp ứng nhu cầu của tôi và tôi nên ở lại với hình ảnh hoặc tạo ra một bức tranh và "bằng tay" vẽ tất cả mọi thứ như trong ứng dụng Gmail?
+1 cho hình dạng, bạn cũng có thể thực hiện một số tính năng nâng cao như thêm bóng đổ, v.v. bằng cách kết hợp hình dạng. – Guillaume
Cảm ơn! Đó chắc chắn là một cải tiến so với hình ảnh. Nhưng Spans sẽ cho phép tôi hiển thị hai hoặc nhiều nhãn trong một TextView - hình dạng, sửa tôi nếu tôi sai, không cho phép tôi làm điều này một cách dễ dàng? – user1234567
Điều này là chính xác, vì bạn có thể sử dụng các hình dạng chính xác như các bản vẽ - vì chúng không gì khác ngoài các hình vẽ. – poitroae