タイトルの件、苦しんでる方多かったのではないでしょうか。
デザイナーさんにこれもう少し文字間空けてって気軽に言われても
対応できないむむむ。。CSSなら簡単なのに!
っていう。
Attributed Stringsを使う
早速やり方なんですが、
Attributed Strings というものを使うことで実現が可能です。(4.1.2時点ではiphoneだけです)
実は3.2.0から使えるようになっていたらしいんですが、
全然知らなくて、今更知りました。
書き方はこんな感じ。
var attr = Ti.UI.createAttributedString({
text: text,
attributes: [
{
type: Ti.UI. ATTRIBUTE_KERN,
value: 5.0,
range: [0,text.length]
}
]
});
var label = Ti.UI.createLabel({
attributedString: attr
});
注意点としては、対象のlabelにすでに色や文字列の設定がついている状態だと、
変になることがあるので、
設定する際は文字、色、フォントなどはlabel自体には設定せず、
AttributedStringでフォントや色なども一緒に設定したほうがいいです。
なので実際はこんな感じ。
var attr = Ti.UI.createAttributedString({
text: text,
attributes: [
{
type: Ti.UI.iOS.ATTRIBUTE_FONT,
value:{fontSize:18,fontFamily:'HiraKakuProN-W3'},
range:[0,text.length],
},{
type: Ti.UI.iOS.ATTRIBUTE_FOREGROUND_COLOR,
value:'#ff0000',
range:[0,text.length],
},{
type:Ti.UI.iOS.ATTRIBUTE_KERN,
value:5.0,
range:[0,text.length],
}
]
});
var label = Ti.UI.createLabel({
attributedString: attr
});
rangeの所を細かくいじれば 1文字目から10文字目まで赤くするとかもできるので、
今まで複数のlabelを使い分けていた人なんかにとっては
めちゃくちゃうれしい機能だと思います。
Androidに期待
このAttribute stringsは徐々にandroidも対応してきているので、
(現在の所フォント、色、アンダーライン、リンクなど)
androidでも文字間調節ができるようになることに期待です!