Intro
Layout 은 Container 에 items 들이 어떻게 배치되야 하는지, 그리고 그 크기는 어떠한지를 결정할 때 사용된다.
HBox Layout
수업 정보 시스템 어플이 있다고 치자. app 을 만들 때 좌편에는 수업 이름, 우편에는 수업 이름 중 하나를 클릭했을 때 해당 수업에 대한 정보를 보여주는 어플이 있다고 치자. 이럴 경우, 두 개의 Panel 이 필요하다고 예상할 수 있다. 좌편의 수업 이름 section 은 1/3 만큼을 차지하고 우편의 수업 이름 section 은 2/3 만큼 차지하게 하고 싶다. 아래의 코드를 보자.
Ext.create('Ext.Container', {
fullscreen: true,
layout: 'hbox',
items: [
{
xtype: 'panel',
html: 'message list',
flex: 1
},
{
xtype: 'panel',
html: 'message preview',
flex: 2
}
]
});
각 아이템에서 flex 를 값을 통해 적절하게 화면의 가로를 분할 하고 있다. (1:2) 로 분할이 될 것이다.
HBox layout 을 사용하는 방법은 layout 속성에 'hbox' 를 주면 된다.
VBox Layout
위와는 반대로 세로로 정렬을 하고 싶을 경우가 있다. 이 때 사용하는 레이아웃이 VBox layout 이다.
Ext.create('Ext.Container', {
fullscreen: true,
layout: 'vbox',
items: [
{
xtype: 'panel',
html: 'message list',
flex: 1
},
{
xtype: 'panel',
html: 'message preview',
flex: 2
}
]
});
위의 코드를 실행하면 아래와 같이 분할 될 것이다.
Card Layout
여러 가지 Components 들을 보여주고 싶은데 화면상의 제약으로 인해 한번에 하나 밖에 못 보여줄 때가 있다. 그 때 사용하는 레이아웃이 Card Layout 이다. 실제로 우리가 직접 쓰기 보다는 TabPanel 이나 Carousel 에서 이 레이아웃을 사용하고, 우리는 TabPanel 이나 Carousel 을 쓰는 경우가 더 빈번하다.
card layout 은 자신의 Container 의 크기에 맞춰지고, 그러므로 현재 active 된 아이템은 해당 크기를 꽉 채우도록 한다. 한번에 하나만 보여지며, 나머지 아이템들은 보이지 않게 된다.
위의 그림에 Card 가 적힌 파란색 카드는 현재 보이는 아이템을 나타내고 나머지 우편의 파란색 카드들은 지금은 보이지 않지만 나중에 보이게 될 지도 모르는 아이템을 나타낸낸다. Card 뒤의 회식 배경 된 카드는 Container 를 의미한다.
코드로 직접 card layout 을 쓸 일은 잘 없지만 만든다면 아래와 같이 쓸 수 있다.
var panel = Ext.create('Ext.Panel', {
layout: 'card',
items: [
{
html: "First Item"
},
{
html: "Second Item"
},
{
html: "Third Item"
},
{
html: "Fourth Item"
}
]
});
panel.setActiveItem(1);
Fit Layout
자식 component 중에 하나를, fit layout 의 Container 의 전체 크기에 꽉 맞게끔 보여주는 것이다.
var panel = Ext.create('Ext.Panel', {
width: 200,
height: 200,
layout: 'fit',
items: {
xtype: 'panel',
html: 'Also 200px by 200px'
}
});
Ext.Viewport.add(panel);
하나 이상의 아이템이 있을 경우, container 가 fit layout 일 경우, 첫 번째 item 만 보이게 된다.
Docking
Container 에서 item 을 고정된 위치에 둘 수 있다. 'top' 'right' 'bottom' 'left' 이렇게 네 군데 중 하나를 둘 수 있다. 아래는 예제 코드 다.
Ext.create('Ext.Container', {
fullscreen: true,
layout: 'hbox',
items: [
{
docked: 'top',
xtype: 'panel',
height: 20,
html: 'This is docked to the top'
},
{
xtype: 'panel',
html: 'message list',
flex: 1
},
{
xtype: 'panel',
html: 'message preview',
flex: 2
}
]
});
docked 를 left 로 주면 어떻게 될까?? 즉, 아래 모양 처럼 만들어 보자.
코드는 아래와 같다.
Ext.create('Ext.Container', {
fullscreen: true,
layout: 'vbox',
items: [
{
docked: 'left',
xtype: 'panel',
width: 100,
html: 'This is docked to the left'
},
{
xtype: 'panel',
html: 'message list',
flex: 1
},
{
xtype: 'panel',
html: 'message preview',
flex: 2
}
]
});
Pack and Align
Pack 과 Align 은 레이아웃에서 자식 elements 들을 어떻게 배치할 지에 결정짓는다.
pack 은 현재 레이아웃의 axis(축) 방향으로 정렬을 하는 것이고,
align 은 현재 레아이웃에 수직한 axis(축) 방향으로 정렬을 하는 것을 의미한다.
pack 이 가질 수 있는 값은 start, center, end 이며
align 이 가질 수 있는 값은 start, center, end, stretch 등이 있다.
HBox 일 때
pack 을 주게 되면 수평으로 아이템이 채워질 때 어디서 부터 채울 것인지를 정하는 것이고
align 을 주게 되면 수직에서 어느 위치에 둘 것인지를 정하는 것이다. stretch 의 경우 수직으로 쫘악! 펴준다는 의미이다.
VBox 일 때
pack 을 주게 되면 수직으로 아이템이 채워질 때 어디서 부터 채울 것인지를 정하는 것이고
align 을 주게 되면 수평에서 어느 위치에 둘 것인지를 정하는 것이다. stretch 의 경우 수평으로 쫘악! 펴준다는 의미이다.
아래 예제 코드를 보자.
Ext.define("Sample.view.Test", {
extend: 'Ext.Panel',
xtype: 'testpanel',
config: {
title: 'Home',
iconCls: 'home',
scrollable: false,
styleHtmlContent: true,
layout: 'fit',
items: [
{
xtype: 'panel',
layout: {
type: 'hbox',
pack: 'start',
align: 'stretch'
},
/* defaults: {
flex: 1
},*/
items: [
{xtype: 'button', text: 'Sencha'},
{xtype: 'button', text: 'Touch'},
{xtype: 'button', text: '2'}
]
}
]
}
});
위의 코드에서 defaults 된 부분의 주석 처리를 해제 하고 다시 실행하면 아래와 같이 된다.
'Sencha Touch 2' 카테고리의 다른 글
6일차 : Sencha Touch 2 class system! (0) | 2012.07.02 |
---|---|
HW4 : Sencha Touch 2 Grid 버튼을 가지는 custom Panel define 하기 (0) | 2012.06.29 |
HW3 : Sencha Touch 2 View 사용하기 (0) | 2012.06.28 |
4일차 : Sencha Touch 2 views 에 대한 이해! (0) | 2012.06.28 |
Extra2 : Sencha Touch 2 Unexpected identifier (0) | 2012.06.27 |