티스토리 뷰



이 자료들은 팁스소프트에서 제공하는 [ 알짜배기 ] 프로그램을 이용하면 더 편리하게 볼수 있습니다.
* 알짜배기 프로그램 받기 - http://www.tipssoft.com/bulletin/tb.php/QnA/8406
* 관리자의 Tipssoft 이야기를 들어보세요 ( 트위터 ID : tipssoft )
* 안드로이드 강좌 목록 - http://www.tipssoft.com/bulletin/tb.php/old_bbs/501

안드로이드 어플리케이션을 작성할때, 하나의 레이아웃 파일로 세로모드와 가로모드를 동일하게
적용하면 아래의 그림처럼 어느 한 쪽 방향이 이상해보이거나 컨트롤이 비효율적으로 배치될 수
있습니다.
위의 어플리케이션의 경우에는 세로방향으로만 사용할 목적으로 개발된 것이기때문에 방향전환 기능
자체를 사용하지 않도록 막아두었지만 가로방향과 세로방향을 모두 사용해야하는 경우라면 각 방향에
맞는 레이아웃을 따로 정의해주는 것이 좋을 것입니다.
이번 강좌에서는 어플리케이션이 실행되고 있는 방향에 따라서 서로 다른 레이아웃을 적용시키는 방법에
대하여 알아보도록 하겠습니다.
1. 기능 구현하기
동일한 액티비티에 대하여 방향별로 서로 다른 레이아웃을 적용시키려면 각 방향별로 다르게 적용할
두개의 레이아웃 파일과 각 파일을 관리하는 폴더가 존재해야합니다.
예를 들어서 기존에는 레이아웃 파일이 layout 폴더의 main.xml 파일로 생성되었다면 방향별로
구분하여 사용할 때에는 layout-land 폴더와 layout-port 폴더에 각각 main.xml 파일을 생성해야
하는 것입니다.
두개의 폴더명에서 사용하는 "layout" 은 기존 layout 폴더의 "layout" 과 동일하게 명시해야하며
가로 방향의 레이아웃 파일을 관리할 때에는 "-land" 키워드를 붙여서 사용하고, 세로 방향의
레이아웃 파일을 관리할 때에는 "-port" 키워드를 붙여서 사용합니다. 그래서 layout-land 폴더 내에
main.xml 파일이 가로모드의 액티비티에 적용되고, layout-port 폴더 내의 main.xml 파일이
세로모드의 액티비티에 적용되는 것입니다.
위의 표에서 세로방향의 폴더부분에 적힌 것처럼 만약 layout-port 폴더가 없는 경우에는 layout
폴더에 있는 레이아웃 파일을 참조합니다.
간단하게 두개의 텍스트뷰와 하나의 버튼으로 구성된 액티비티의 레이아웃을 방향별로 다르게
구성하여 적용하는 예제를 살펴보도록 하겠습니다.
<!-- 프로젝트 폴더/res/layout-land 폴더의 main.xml 파일 -->
<!-- 버튼, 텍스트뷰, 텍스트뷰 순서로 레이아웃이 구성되어 있다. -->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/temp_btn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="단순한 버튼"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="가로 기준의 액티비티 레이아웃!"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="세로로 전환하려면 세로로 기기를 드세요!"
/>
</LinearLayout>
<!-- 프로젝트 폴더/res/layout-port 폴더의 main.xml 파일 -->
<!-- 텍스트뷰, 텍스트뷰, 버튼 순서로 레이아웃이 구성되어 있다. -->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="세로 기준의 액티비티 레이아웃!"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="가로로 전환하려면 가로로 기기를 드세요!"
/>
<Button
android:id="@+id/temp_btn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="단순한 버튼"
/>
</LinearLayout>
// 자바파일
public class SeparateRotateActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// layout-xxx 파일 내의 main.xml 파일이 현재 액티비티의 방향에 따라 알아서 적용된다.
setContentView(R.layout.main);
}
}
2. 실행 파일


댓글