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. 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.  
  1. 안드로이드 애뮬레이터를 실행하면 기본적으로 영어권에 맞춰있다. 그래서 시간은 물론이고 입력키보드도 한국과 맞지 않다. 가장 먼저 지역설정은 Custom Local에서 ko_KR을 선택한다. (선택이 잘 안되면 오~래 누르고 있어보자.) 그럼 이제 안드로이드의 인터페이스가 한국어로 출력되어나온다. 하지만 여전히 키보드 입력은 한글이 되지 않는다.

    

  2. 키보드 입력은 한국 개발자가 만들어 놓은 프로그램을 설치하여 사용 가능하다. 현재 한글 키보드 프로그램을 공개하고있는 사이트는 안드로이드펍 에 접속하여 접촉식 한글 자판 최신 바이너리를 다운받는다. 

     
  3. 안드로이드 프로그램의 확장자는 .apk이다. 이를 애뮬레이터에 설치하기위해서는 SDK가 설치된 곳에 adb.exe라는 실행 파일을 사용해야한다. 그러기 위해 다운받은 .apk파일을 adb.exe파일이 있는곳으로 옮긴 후 커맨드창으로 다음 명령어를 사용하여 설치 하면 된다. 현재 아래에 Failure라고 뜨는 이유는 내 애뮬레이터에는 이미 설치가 되어있기 때문이고, 처음 실행하였다면 Success 문구가 나왔을 것이다.
     



  4. 설치가 끝났으므로 이제 설정을 해보자. 안드로이드 설정 메뉴에 들어가 언어 및 키보드에서 한글 접촉식 키보드가 생긴 것을 확인하고 이를 선택하자. 그리고나서 글자 입력 창을 선택하면 한글 키보드가 나올 것이다. 
     



+ Recent posts