前回の記事が公開された直後からTitaniumには大きなバージョンアップがあったので、
Titanium Moble 1.5.1 リリース
前回までの記事は Titanium Mobile 1.
また、
ツイートを綺麗に表示しよう
さて前置きはこのぐらいで本題に入りましょう。前回は自分のツイートが一欄できるところまで実装しましたが、
では早速次のようにコードを変更してみましょう。前回作ったupdateTimeLine関数を変更していきます。まずは、
function updateTimeline (timeline) {
var currentData = [];
for (var i=0;i<timeline.length;i++) {
var tweet = timeline[i];
//ここから変更開始
var row = Ti.UI.createTableViewRow(
{
height: 150,
layout: 'absolute'
}
);
var imageView = Ti.UI.createImageView(
{
image: tweet.user.profile_image_url,
width: 48,
height: 48,
top: 5,
left: 5
}
);
row.add(imageView);
var nameLabel = Ti.UI.createLabel(
{
width: 120,
height: 12,
left: 58,
top: 5,
fontSize: 6,
fontWeight: 'bold',
color: '#2b4771'
}
);
nameLabel.text = tweet.user.screen_name;
row.add(nameLabel);
var commentLabel = Ti.UI.createLabel(
{
width: 257,
left: 58,
top: 18,
height: 100,
fontSize: 8
}
);
commentLabel.text = tweet.text;
row.add(commentLabel);
var dateLabel = Ti.UI.createLabel(
{
width: 200,
height: 12,
left: 58,
bottom: 8,
fontSize: 6
}
);
dateLabel.text = tweet.created_at;
row.add(dateLabel);
//変更終わり
currentData.push(row);
}
tableView.setData(currentData);
}
一度Titaniumの開発環境から起動してみると次のような表示になるはずです。
![画像](/assets/images/dev/serial/01/titanium/0003/thumb/TH250_001.png)
まだ不恰好ですが一応Twitterのタイムラインらしくなってきました。ではこのレイアウトの機能について一つ一つ解説していきましょう。
WindowとView
画面全体を覆っている一番下の部分のことをTitaniumでは
そのviewのレイアウトですが、
var nameLabel = Ti.UI.createLabel(
{
width: 120,
height: 12,
left: 58,
top: 5,
fontSize: 6,
fontWeight: 'bold',
color: '#2b4771'
}
);
widthやhightでそのviewの大きさを、
レイアウト基準
CSSでのHTMLのレイアウトは、
何も指定しない場合
デフォルトでの動作は、
vertical
layoutパラメータにverticalを指定すると、
先程のコードを次のように変えてみましょう
function updateTimeline (timeline) {
var currentData = [];
for (var i=0;i<timeline.length;i++) {
var tweet = timeline[i];
//再度ここから変更開始
var row = Ti.UI.createTableViewRow(
{
height: 150,
layout: 'vertical'
}
);
var imageView = Ti.UI.createImageView(
{
image: tweet.user.profile_image_url,
width: 48,
height: 48,
top: 5,
left: 5
}
);
row.add(imageView);
var nameLabel = Ti.UI.createLabel(
{
width: 120,
height: 12,
left: 58,
top: -48,
fontSize: 6,
fontWeight: 'bold',
color: '#2b4771'
}
);
nameLabel.text = tweet.user.screen_name;
row.add(nameLabel);
var commentLabel = Ti.UI.createLabel(
{
width: 257,
left: 58,
top: 1,
height: 100,
fontSize: 8
}
);
commentLabel.text = tweet.text;
row.add(commentLabel);
var dateLabel = Ti.UI.createLabel(
{
width: 200,
height: 12,
left: 58,
top: 5,
fontSize: 6
}
);
dateLabel.text = tweet.created_at;
row.add(dateLabel);
//変更終わり
currentData.push(row);
}
tableView.setData(currentData);
}
このようにコードを変更しても見た目はほとんど変わりません。しかしverticalを指定すると前に追加されたviewを基準にtopを指定できるようになります。topにはマイナス値も指定できますので、
auto指定
また、
![画像](/assets/images/dev/serial/01/titanium/0003/thumb/TH250_002.png)
こちらも、
画像を表示する
Twitterのユーザーアイコンを表示する部分では、
var imageView = Ti.UI.createImageView(
{
image: 'iphone/appicon.png',
//ファイル名はプロジェクトのResorcesフォルダからの相対パス
width: 48,
height: 48,
top: 5,
left: 5
}
);
row.add(imageView);
コードを分割しよう
ここまで実装をしてくると、
Titaniumではファイルを分割する方法がいくつかありますが、
いままで書いてきたapp.
Titanium.UI.setBackgroundColor('#000');
var tabGroup = Titanium.UI.createTabGroup({});
var win1 = Titanium.UI.createWindow({
url: 'table_view.js',
title:'Tab 1',
backgroundColor:'#fff'
});
var tab1 = Titanium.UI.createTab({
window:win1
});
win1.hideTabBar();
tabGroup.addTab(tab1);
tabGroup.open();
var win = Ti.UI.currentWindow;
var data = [];
var tableView = Ti.UI.createTableView({
data:data
});
function updateTimeline (timeline) {
var currentData = [];
for (var i=0;i<timeline.length;i++) {
var tweet = timeline[i];
var row = Ti.UI.createTableViewRow(
{
height: 150,
layout: 'vertical'
}
);
var imageView = Ti.UI.createImageView(
{
image: 'iphone/appicon.png',
width: 48,
height: 48,
top: 5,
left: 5
}
);
row.add(imageView);
var nameLabel = Ti.UI.createLabel(
{
width: 120,
height: 12,
left: 58,
top: -48,
fontSize: 6,
fontWeight: 'bold',
color: '#2b4771'
}
);
nameLabel.text = tweet.user.screen_name;
row.add(nameLabel);
var commentLabel = Ti.UI.createLabel(
{
width: 257,
left: 58,
top: 1,
height: 100,
fontSize: 8
}
);
commentLabel.text = tweet.text;
row.add(commentLabel);
var dateLabel = Ti.UI.createLabel(
{
width: 200,
height: 12,
left: 58,
top: 5,
fontSize: 6
}
);
dateLabel.text = tweet.created_at;
row.add(dateLabel);
currentData.push(row);
}
tableView.setData(currentData);
}
var xhr = Ti.Network.createHTTPClient();
var user = 'hatenatech';
var url = "http://api.twitter.com/1/statuses/user_timeline.json?screen_name=" + user;
xhr.open('GET', url);
xhr.onload = function() {
var timeline = JSON.parse(this.responseText);
updateTimeline(timeline);
};
xhr.send();
win.add(tableView);
app.
var win1 = Titanium.UI.createWindow({
url: 'table_view.js', //ここに注意!
title:'Tab 1',
backgroundColor:'#fff'
});
もう一つの注意ポイントは新しく作ったtable_
var win1 = Ti.UI.currentWindow;
というコードが先頭に追加されている点です。分割前のコードではviewを追加する対象のwindowがグローバルな変数win1として見えていました。しかし分割後のファイルからはこの変数が参照できなくなります。createWindowで指定されるファイルのコードからは、
そこで、
ほかのファイルから変数が参照できなくなる、
まとめ
今回はWindowとViewの関係とそのレイアウト方法について解説しました。また後半では、