안드로이드(Android) 기기의 다양한 화면 지원하기

안드로이드(Android) OS는 다양한 기기에 포팅될 수 있다. 그리고 다양한 기기는 자신만의 화면 크기를 가지는 경우가 많다. 이렇다 보니 애플리케이션을 개발하다 보면 기기의 고유 해상도로 인해서 문제가 생길 수 있다.

안드로이드는 허니콤 버전부터 태블릿을 지원하기 시작해서, 아이스크림부터는 모바일과 태블릿을 같이 지원하기 시작했다. 이런 상황이다 보니, 구글에서는 해상도에 어울리게 UI를 구성(XML 파일로 구성)하도록 가이드(Supporting Multiple Screens) 하고 있다. 이 가이드를 보면 다양한 해상도를 지원하려면 /res/layout-sw600dp/layout.xml 과 같은 파일을 화면에 적합하게 여러 개 만들어서 개발하라는 것이다.

화면에 적당한 UI로 앱의 퀄리티를 유지하는 방향으로는 좋겠지만, 그만큼 개발비용(iOS에 비해)을 증가시킬 게 분명하다. 물론, 이 방법으로 한 바이너리로 모바일/태블릿/TV를 지원할 수 있어서 좋긴 하다. 하지만 가이드 대로 개발해 보니, 이렇게 분리해서 개별 UI(모바일/태블릿/TV)의 장점을 살릴 수 있을까? 라는 질문에는 잘 만들면(?) 된다는 생각이다. 한 바이너리로 여러 화면에 적합한 UI를 서비스 할 수 있다는 것은 역시나 매력적이고 앞으로도 이 방향으로 서비스를 개발하는 것이 좋겠다.

앱을 개발하면서 화면별(모바일, 태블릿 그리고 TV) UI 구성은 어떻게 할 수 있을까? 에 대한 대답은 layout_weight 속성으로 해결한다는 것이다.

아래 예제에서 <LinearLayout>의 layout_weight 속성을 가지는 요소는 자신의 UI가 차지하는 %를 숫자(6 -> 60%)로 표현한 것이고, weightSum은 없으면 알아서 배열하지만, 아래 예에서는 10으로 입력해 놓았다. 그리고 가로(horizontal) 또는 세로(vertical)의 비율로 크기를 맞추는 방법은, 가로를 맞추기 위해서는 layout_width, 세로로 맞추기 위해서는 layout_height을 ‘0dp’로 입력하면 된다.

아래는 위에서 설명한 화면의 구성을 비율로 구성한 예이다.

<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
    android:id=”@+id/linearLayout”
    android:orientation=”horizontal”
    android:layout_width=”fill_parent”
    android:background=”#568dfb”
    android:weightSum=”10.0″
    android:layout_gravity=”center_vertical”
    android:layout_height=”40dp”>

    <TextView android:id=”@+id/textView”
        android:text=” “
        android:visibility=”visible”
        android:paddingLeft=”8dp”
        android:layout_width=”0dp”
        android:layout_weight=”6″
        android:textColor=”@android:color/white”
        android:layout_height=”40dp”
        android:textAppearance=”?android:attr/textAppearanceMedium”/>

       <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
        android:id=”@+id/linear_container”
        android:orientation=”horizontal”
        android:layout_width=”0dp”
        android:layout_height=”40dp”
        android:layout_weight=”4″
        android:background=”#568dfb”
        android:gravity=”right”
        android:layout_gravity=”center_vertical”>
       
        <ProgressBar
            android:layout_gravity=”right|center_vertical”
            android:background=”#568dfb”
            android:layout_width=”30dp”
            android:layout_height=”30dp” />
       
        <TextView
            android:id=”@+id/loadingTextView”
            android:layout_width=”wrap_content”
            android:layout_height=”40dp”
            android:layout_gravity=”right”
            android:background=”#568dfb”
            android:gravity=”center_vertical”
            android:paddingLeft=”4dp”
            android:paddingRight=”4dp”
            android:text=”Loading…”
            android:textAppearance=”?android:attr/textAppearanceMedium”
            android:textColor=”@android:color/white”/>
    </LinearLayout>
</LinearLayout>

 

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.