2011-12-16 2 views
7

В моем приложении у меня есть что-то похожее по внешнему виду на ярлыки в пользовательском интерфейсе приложения GMail. Для тех, кто может не знать, они выглядят так (эти ярлыки являются яркими): Gmail screenshotBackgroundColorSpan с дополнительным вертикальным отступом

Для достижения аналогичного эффекта я использую вытяжки с девятью патчами - для каждой метки я создаю TextView и назначаю для нее рисование , Это простое решение, но мне это не нравится. Это не изящно, это довольно медленно, как показано профилировщиком, и я просто не думаю, что это правильный способ сделать это.

Я изменил дизайн пользовательского интерфейса, чтобы сделать его более «ICS-y», поэтому я удалил закругленные углы с ярлыков. И я подумал, как заменить 9-патч-решение. Самое очевидное - использовать BackgroundColorSpan. Но у него есть один, маленький недостаток. Я хочу, чтобы на моих ярлыках было какое-то дополнение. С помощью чертежей это было легко достичь. С пролетами это сложнее. Чтобы сделать горизонтальное заполнение, я могу просто добавить пробелы в начале и в конце строки. Но как увеличить вертикальное заполнение? Для того, чтобы убрать вещи, это скриншот этикетки с BackgroundColorSpan:

enter image description here

Я хочу, чтобы сделать цветные детали выше и ниже текста больше. Я думаю, что я должен использовать какой-то MetricAffectingSpan, но я не мог понять, какой из них. Или, может быть, я должен написать свой собственный? Или, наконец, возможно, промежутки просто не в состоянии удовлетворить мои потребности, и я должен оставаться с изображениями или создавать холст и «вручную» рисовать все, как в приложении GMail?

ответ

2

Самый простой способ сделать это, и я уверен, что приложение GMAIL использует его, это формы.

Просто создайте пользовательскую форму shape, в вашем случае прямоугольную форму с закругленными углами и сплошным цветом, и назначьте это значение, а затем свойство фона вашего текстового изображения.

Форма определена в xml. Вы присвоите его следующим образом:

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

+1 для форм, вы можете также сделать некоторые дополнительные вещи, как добавить тень и т.д., комбинируя форму. – Guillaume

+0

Спасибо! Это определенно улучшение по сравнению с изображениями. Но Spans позволил мне отображать два или более ярлыка в одной форме TextView, исправить меня, если я ошибаюсь, не позволяйте мне делать это легко? – user1234567

+0

Это правильно, так как вы можете использовать фигуры точно так же, как drawables - поскольку они не что иное, как drawables. – poitroae

Смежные вопросы