2012/06/18

android.support.v7.widget.GridLayout 사용하기

Android 4.0 에서 제공되기 시작한 GridLayout은 화면을 구성하는 데 매우 편리한 구성요소입니다. 하지만 사용할 수 있는 API 레벨이 14!!!
아마 왠만한 앱 개발자라면 그 아무도 GridLayout을 함부로 사용할 수는 없었을 겁니다. ㅠ.ㅠ

그런데 Support Library r7 부터 이 문제를 해결해줄 android.support.v7.widget.GridLayout 가 조용히 등장했습니다.  하지만 안드로이드 개발자 블로그에도, 개발자 사이트에서도 검색조차 잘 안되고 있는 슬픈 상황입니다.

Support라이브러리를 통해 GridLayout를 한번 사용해 볼까요?

기능

일단 기능은 http://android-developers.blogspot.kr/2011/11/new-layout-widgets-space-and-gridlayout.html 에서 말하고 있는 android.widget.GridLayout 완전히 동일합니다.

간단히 설명하면 화면을 Grid영역으로 나누고 각각의 자식요소들의 위치와 크기를 지정하는 방식으로 레이아웃을 구성하는 방법입니다.

GridLayout를 사용하면 기존에 Layout여러개를 중첩해서 구성해야했던 구조를 간단하게 구현할 수 있습니다.

내 앱 프로젝트에서 사용하기

1. ADT업데이트

먼저 ADT와 SDK Tools을 최신버전으로 업데이트 합니다. (현재 최신 버전은 r19로 GridLayout이용하기 위해서는 r17이상으로 업데이트되어야 합니다.)
(SDK가 설치된 경로는 ANDROID_SDK 라 칭합니다.)

$ANDROID_SDK/extras/android/support/v7/gridlayout/

위 경로에 안드로이드 라이브러리 프로젝트의 형태로 gridlayout support라이브러리가 자리잡고 있습니다.

2. 프로젝트 import

이클립스에서 이 경로에서 프로젝트를 import 하거나 이 디렉토리를 내 프로젝트의 적절한 경로에 복사후 import 합니다. (저의 경우 3rd-libs 라는 경로에 복사)

import 후 보여지는 내용

3. 라이브러리 프로젝트로 지정

다음과 같이 내 앱의 프로젝트 설정에서 Add 눌러 위의 library 프로젝트를 사용하도록 설정합니다.

라이브러리 프로젝트 사용설정

레이아웃 구성하기

위의 블로그 링크에서 설명하듯이 레이아웃을 구성했다면 xml에서 <GridLayout>  대신 <android.support.v7.widget.GridLayout> 을 사용하도록 변경합니다. <Space> 역시 <android.support.v7.widget.Space> 를 사용하도록 변경합니다.

그리고 GridLayout의 Attribute가 포함되어야 하기 때문에 다음과 같이 namespace를 지정하고
gridlayout과 관련된 attribute는 app:layout_column="1" 식으로 지정해줍니다.


<android.support.v7.widget.GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"


마치기

중첩된 LinearLayout으로 구성된 복잡한 구조를 GridLayout으로 쉽게 구성해 보세요. GridLayout의 소중함을 느끼실 수 있을겁니다~ :)


Ubuntu 10.04 에 sun-java6-jdk 설치하기

ubuntu에 jdk 패키지가 빠진 이후로 설치가 매우 어려워졌다.
다행히 debian쪽에는 패키지가 남아 있어서 그쪽을 사용하는 방법으로 시도해보기로 했다. 
sudo add-apt-repository "deb http://ftp.debian.org/debian squeeze main contrib non-free"
sudo apt-get update
sudo apt-get install sun-java6-jdk

이렇게 했는데 데비안 apt저장소 키가 등록이 안됬다고 나온다. 이럴땐 서버 gpg키를 받아서 등록해주자.
(AED4B06F473041FA는 위에서 나온 에러에 포함)

gpg --keyserver subkeys.pgp.net --recv-keys AED4B06F473041FA
gpg -a --export AED4B06F473041FA | sudo apt-key add -

이렇게게 했는데도 로컬 apt저장소 용량이 작다고 나온다. 좌절하지 말고 설명대로 아래와 같이 저캐시 용량을 늘려준다.

sudo vi /etc/apt/apt.conf.d/70debconf
맨 밑줄에 
APT::Cache-Limit "100000000";
추가 후에
sudo apt-get clean && sudo apt-get update --fix-missing

이렇게 삽질은 한 후에 누가 만들어 놓은 한방에 처리하는 스크립트를 찾았다. 하하하;;;