1. 테이블 레이아웃은 이름에서 알 수 있듯이 뷰 객체들을 테이블 형태로 행과 열을 맞추어 표시할 수 있게 해 주는 레이아웃이다. 테이블 형태이지만 구분선이 없고 레이아웃의 크기에 한정되어 객체들이 배치되어야 하기 때문에 모든 행의 높이는 wrap_content로 설정되고 한 열의 크기는 가장 큰 객체의 크기에 맞추어 배치된다. 이 때 셀 내용의 크기가 열 폭에 비해 긴 경우는 접어서 표기되기 때문에 적절히 열 폭을 늘리거나 줄이는 작업을 따로 해 줄 필요가 있다.
     
  2. TableLayout의 열에 대한 속성.

    속 성

    의 미

    android:collapseColumns

    숨길 열의 번호

    0부터 시작하는 열의
    번호를
    comma로 구분

    android:shrinkColumns

    숨길 열의 번후

    android:stretchColumns

    늘릴 열의 번호

    android:layout_Columns

    이 뷰가 표시될 열 번호

    android:layout_Columns

    이 뷰가 차지할 열들의 개수


  3. 간단한 성적표를 출력하는 TableLayout을 만들어보자.
    <?xml version="1.0" encoding="utf-8"?>
    <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:stretchColumns="1"
        >
        <TableRow>
        	<TextView android:text="@string/kor" android:padding="5dip" />
        	<TextView android:text="@string/eng" android:background="#fff"
        		 android:padding="5dip" />
        	<TextView android:text="@string/mat" android:padding="5dip" />
        </TableRow>
        <TableRow>
        	<TextView android:text="90" android:padding="3dip" />
        	<TextView android:text="91" android:padding="3dip" />
        	<TextView android:text="92" android:padding="3dip" />
        </TableRow> 
    </TableLayout>



     위에서 가운데 영어 성적인 1번째 (0번 부터)열의 크기를 stretchColumns로 늘렸기 때문에 국어,수학 외의 나머지 공간을 모두 채워 넣게 된 것이다. 그리고 padding은 안쪽 여백을 설정 하는 것으로 dip 단위는 해상도에 종속되지 않게 물리적인 화면의 크기에 비례하는 수치이다.

     

'Programming > ANDROID' 카테고리의 다른 글

Layout 중첩 - Multi Page  (6) 2011.03.29
ViewGroup - RelativeLayout  (2) 2011.03.29
ViewGroup - FrameLayout  (1) 2011.03.28
ViewGroup - LinearLayout  (2) 2011.03.28
뷰 그룹(View Group) - Layout  (1) 2011.03.28
  1. FrameLayout(프레임 레이아웃)은 가장 단순한 레이아웃이다. 내부 View객체들을 항상 왼쪽 상단에 쌓아둔다. 즉 가장 마지막에 추가된 객체가 화면에 보이게 될 것이다. 각 객체들에 대한 Visibility속성을 가지고 화면에 표시할지 안할지를 정의할 수 있다. 이를 이용해 프레임레이아웃에 있는 객체를 클릭하면 사라지게 한다든지 하는 이벤트를 사용 할 수 있다. 이런 이벤트를 사용할 때 보통 기본적인 레이아웃들을 만들어 놓고 이를 프레임 레이아웃에 넣어서 이벤트에 사용한다.
     
  2. FrameLayout의 경우 간단히 다음 예제를 하나 보면 이해가 될 것이다. ImageView와 Button객체를 가지고있는 FrameLayout을 실행하여 버튼이벤트에 ImageVIew의 Visibility를 VISIBLE 과 INVISABLE 설정하여 화면에 보이게/ 안보이게 하는 예제이다.

     먼저 layout의 xml코드이다.
    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="fill_parent"
             android:layout_height="fill_parent">
    <Button
                 android:id="@+id/btn"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:text="Push Button"/>
    <ImageView
                 android:id="@+id/img"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:src="@drawable/icon" />
    </FrameLayout>
    다음은 java 코드이다.
    package com.example.FrameLayoutTest;
    
    import android.app.*;
    import android.os.*;
    import android.view.*;
    import android.widget.*;
    
    public class FrameLayoutTest extends Activity  {
            public void onCreate(Bundle savedInstanceState)  {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.main);
    
                    Button btn =  (Button)findViewById(R.id.btn);
                    btn.setOnClickListener(new Button.OnClickListener()  {
                            public void onClick(View v)  {
                                    ImageView img=(ImageView)findViewById(R.id.img);
                                    if(img.getVisibility() == View.VISIBLE)  {
                                            img.setVisibility(View.INVISIBLE);
                                    } else  {
                                            img.setVisibility(View.VISIBLE);
                                    }
                            }
                    });
            }
    }
    실행결과
     

     버튼클릭->  

    이런 방식으로 레이아웃 여러개를 표시할 수 있는 MultiPage 구성이 가능해 진다.

    ↗당연하지만 중요한 것 하나는 다른 레이아웃 또는 다른 xml에서 정의하는 객체라도 id값은 중복 되면 안된다는 것이다. 모든 ID값은 R.java에서 관리 하기 때문에 인식하지 못해서 에러가 나게된다.

'Programming > ANDROID' 카테고리의 다른 글

ViewGroup - RelativeLayout  (2) 2011.03.29
ViewGroup - TableLayout  (1) 2011.03.29
ViewGroup - LinearLayout  (2) 2011.03.28
뷰 그룹(View Group) - Layout  (1) 2011.03.28
안드로이드 한글 키보드 설정  (4) 2011.03.27
  1. LinearLayout은 수직(vertical)방향과 수평(horizontal)방향으로 뷰 객체들을 나열하는 레이아웃이다.
    android:orientation="vertical android:orientation="horizontal
     

     

     
    여기서 중요한것은 한 방향으로 계속 객체들을 추가하여 화면을 벗어나게 될 경우 자동으로 다음줄에 나온다거나 하지않고 그저 화면밖에 그려지기 때문에 실행 했을 때 역시 화면에 나오지 않게된다. 
     
  2. 위에서 뷰 객체를 버튼을 사용하였는데 객체마다 가지고있는 속성에대해서도 간단히 알아보자.
    <TextView android:text="딸기맛" 
    android:textSize="20pt" android:textStyle="bold"
    android:textColor="#ff0000" android:background="#ffffff"
    android:id="@+id/textView1" android:layout_width="fill_parent" 
    android:layout_height="wrap_content"></TextView>

    위에서 중요것은 android:layout_width="fill_parent"로 상위 View의 크기에 맞게 자신의 크기를 설정한다는것이다. 보통은 자신이 가지고있는 내용물의 크기아 맞게 크기를 설정하는 wrap_content를 사용한다.


  3. 다음으로 알아 볼 것은 레이아웃 내부의 객체들의 정렬위치를 설정할 수 있는 Gravity이다. 리니어 레이아웃의 Default값은 "left|top"으로 좌측 상단부터 정렬된다. Gravity로 지정할 수 있는 방향은 다음과 같다.
     top  컨테이너 위에 위치
     bottom  컨테이너 아래 위치
     left  컨테이너 왼쪽에 위치
     right  컨터이너 오른쪽에 위치
     center_vertical  컨테이너의 수직방향의 중앙에 위치
     center_horizontal  컨테이너의 수평방향의 중앙에 위치
     fill_vertical  수직방향을 컨테이너의 사이즈로 확대하여 배열
     fill_horizontal  수평방향을 컨테이너의 사이즈로 확대하여 배열
     center  컨테이너의 수평/수직방향의 중앙에 위치
     fill  수평/수직 모두 컨테이너의 사이즈에 확대하여 위치
    예를들어 레이아웃내에서 가운데 정렬되는 TextView를 하나 선언 해 보면 아래와 같다.

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" 
        android:gravity="center"
        android:orientation="vertical">
        <TextView android:text="가운데 정렬" 
        android:id="@+id/textView1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"></TextView>
    </LinearLayout>



'Programming > ANDROID' 카테고리의 다른 글

ViewGroup - TableLayout  (1) 2011.03.29
ViewGroup - FrameLayout  (1) 2011.03.28
뷰 그룹(View Group) - Layout  (1) 2011.03.28
안드로이드 한글 키보드 설정  (4) 2011.03.27
안드로이드 레이아웃-XML (Layout-XML)  (1) 2011.03.24

  1. View group은 View들을 담을수 있는 컨테이너 역할을 한다고 앞서 설명했다. View클래스로부터 파생된 ViewGroup의 서브클래스들은 다음과 같다.

  2. 위의 다양한 View들 중에서 자주 사용하여 앞으로 실습까지 해 볼 것들을 미리 간단히 정리해보자.
    • LinearLayout : 수직(vertical)방향이나 수평(horizontal)방향으로 객체들을 배치하는 가장 기본적인 레이아웃이다.
    • FrameLayout : 왼쪽 상단을 기준으로 각각 객체들을 겹치게 표현한다. 이것을 이용 해 카드게임과 같이 맨 위의 카드와 아래의 카드를 순서대로 볼 수 있게 설정할 수 있다.
    • TableLayout : 행과 열을 가지는 표 형태의 레이아웃으로 가장 큰 요소의 크기로 셀을 설정하며 셀 테두리는 보이지 않는다.
    • AbsoluteLayout : 뷰 객체의 위치를 좌표형식으로 설정하는 방식으로 실무에서는 거의 사용되지않는다.
    • RelativeLayout : 뷰 객체들간의 상대적인 위치를 지정하는 레이아웃으로 1번의 왼쪽 2번의 아래쪽 이런 방식으로 상대적인 위치를 설정하게된다.
    • Gallery : 스마트폰의 사진 스크롤화면처럼 이미지들을 터치로 끌어서 볼수있도록 해준다.
    • GridVIew : 격자 모양으로 보여주는 클래스.
    • ListView : 스크롤되는 하나의 컬럼 리스트를 보여주는 클래스
    • ScrollView : 수직으로 구성요소의 열을 스크롤링하게 하는 클래스
    • Spinner : 콤보박스 역할을 하는 클래스
    • SurfaceView : Low level 그리기를 지원하는 클래스 (쓰레드를 이용한다)
       
  3. 자 그럼 이제 가장 기본적인 LinearLayout부터 알아보도록하자!

  4.  

+ Recent posts