2011-12-16 32 views
7

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): Gmail screenshotBackgroundColorSpan 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:

enter image description here

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?

Trả lời

2

Cách dễ nhất để thực hiện việc này và tôi khá chắc chắn rằng ứng dụng GMAIL đang sử dụng nó, là hình dạng.

Chỉ cần tạo một tùy chỉnh shape, trong trường hợp của bạn là hình chữ nhật với các góc được làm tròn và màu đồng nhất, và gán điều này có thể vẽ sau đó đến thuộc tính nền của chế độ xem văn bản của bạn.

Hình dạng được xác định bằng xml. Bạn sẽ chỉ định như sau:

<TextView 
    ... 
    android:background="@drawable/my_awesome_shape" /> 
+0

+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

+0

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

+0

Đ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

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