• 1나루토매니아
  • 2뱅이
  • 3푸타코타
  • 4완벽그자체
  • 5해삼
  • 1뱅이
  • 2나루토매니아
  • 3알짜배기
  • 4뱅이
  • 5빙그레우유
[안드로이드 앱 개발] 4.UI 만들기
연속출석 :
1일 랭킹 : 2위 별훈5
42%
42% (84989 /200000)
  • 댓글 12 |
  • 추천 3 |
  • 조회 10715 |
  • 2013-10-28 (월) 13:24
    첫 안드로이드 어플 만들기에서 화면에 표시할 문자열을 지정하기 위해 res>layout>main.xml을 더블클릭해서 내용을 확인했는데, 이때 보이는 화면이 Graphical Layout Editor 이다. 비쥬얼스튜디오를 사용해 본 개발자라면 리소스 편집기와 비교하면 쉽게 이해 할 수 있다. 

    비쥬얼스튜디오의 리소스편집기의 역할은 버튼이나 텍스트박스, 리스트등의 컨트롤을 개발자가 드로잉하여 속성을 설정하면 *.rc 파일에 텍스트 형태로 저장하듯이, 

    Graphical Layout Editor의 역할도 개발자가 버튼이나 텍스트를 비롯한 다양한 컨트롤을 배치하고 속성을 설정하면 *.xml 파일에 XML(텍스트 파일) 형태로 편집 내용을 저장하는 것이다. 그래서 하단의 Graphical Layout Editor 탭을 클릭해서 편집할 수도 있고, main.xml 탭을 클릭해서 직접 XML로 코딩할 수도 있다. 이번 포스팅에서는 Graphical Layout Editor를 위주로 설명할 까 한다.

    보다 손쉽게 다양한 컨트롤 속성을 파악하기 위해서 그림 설명과 같이 하단에 있는 속성(Properties)창을 패키지 탐색기 옆으로 끌어다 놓는 방식으로 이동시킨다.


    속성창을 패키지 탐색기 옆으로 이동시켜놓은 다음 "안녕하십니까?....."스트링을 선택하고 이때, 텍스트 박스에 해당하는 속성들과 설정한 값을 아래와 같이 확인했다.


    Graphical Layout Editor를 사용할때는 좌측으로 옮겨놓은 속성창과(Property와 Value로 나뉘는데 Value 셀을 클릭해서 설정할 수 있다)
    우측에 있는 현재 화면의 전체적인 골격을 나타내는 Outline창(속성창에서 값을 바꿀수도 있지만 Outline의 특정 Object를 우측 마우스로 클릭할때 나오는 아래 그림과 같은 팝업메뉴로도 변경 할 수 있다) 

    그리고 중앙 좌측의 Palette영역과(Palette제목이나 그룹 제목을 우측 마우스로 클릭하면 팝업메뉴가 나오는데 다양한 컨트롤을 미리보기나 작은 아이콘 배열, 분류 보기 등으로 조절할 수 있다) 

    Palette영역에 있는 각종 컨트롤을(위젯이라고 부른다) 끌어다 놓는 방식으로  UI를 편집하는 Canvas영역
    끝으로 Canvas 상단의 Configuration Chooser를 상호 참조하면서 작업한다.


    * 주요 컨트롤 속성 다루기
    컨트롤을 캔버스에 배치하고 속성을 설정하는 과정에서 자주 사용하는 설정을 위한 캔버스 상단에 기능 버튼들을 두었는데, 각각의 설명은 다음과 같다.

    1. Set Horizontal Orientation : Linear layout을 가로 방향으로 배치
    2. Set Vertical Orientation : Linear layout을 세로 방향으로 배치
    3. Toggle Fill Width : wrap_content와 match_parent를 토글 방식으로 설정, 선택하면 match_parent
      wrap_content는 컨트롤 자체의 내용 만큼만 폭이나 길이를 갖겠다는 것이고,
      match_parent는 컨트롤이 속한 상위 요소의 폭이나 길이를 채우겠다는 의미로 예제에서 텍스트 박스 폭을 레이아웃에 가득차게 한것이다. 이 옵션을 많이 사용할 텐데, 기기를 가로로 하든 세로로 하든 폭이나 길이를 자동으로 꽉 채워 표시한다.
    4. Toggle Fill Height : wrap_content와 match_parent를 토글 방식으로 설정, 선택하면 match_parent
    5. Change Margins... : 컨트롤과 상위요소 간의 간격을 조정한다. 이 간격(Margin)은 컨트롤 내에서 경계와 실제 내용 간격을 지정하는 Padding과는 구별된다.
    6. Change Gravity : 개별 컨트롤 경계 내에서 내용을 어떻게 표시할 것인지를 지정한다.
    7. Distribute Weight Evenly : 레이아웃 내에 여러 컨트롤을 자동적으로 폭이나 길이 조정하는 경우 각 컨틑롤이 동일한 크기가 되도록 가중치를 동일하게 배분한다.
    8. Assign All Weight : 선택한 컨트롤에 모든 가중치를 부여
    9. Change Layout Weight : 선택한 컨트롤의 가중치를 직접 수정
    10. Clear All Weight : 입력되어 있는 모든 가중치를 초기화
    11. Toggle Fill Width
    12. Toggle Fill Height
    13. Change Margins...
    14. Show Lint Warnings for this layout : UI작성 과정의 불필요한 자원 할당등을 알려준다.

    * Layout의 종류
    UI 구성 방법은 자동으로 생성된 첫 안드로이드 어플 처럼, 먼저 레이아웃을 배치하고 그 레이아웃에 위젯이나 다른 레이아웃을 포함하여 배치시키는 방법으로 구성한다. 구성 요소들의 성격과 개수등을 감안하고 동작형태를 생각해서 적당한 레이아웃을 선택하는 것이 매우 중요하다.

    윈도우 내에 표시하는 텍스트나 이미지, 편집창등의 배치를 단순히 폰트의 크기나 픽셀에 의존하면, 운영체제의 전체적인 테마 변경이나, 시스템 폰트 변경등에 의해 원래 개발자의 의도를 벗어나 각 요소의 배치가 흐트러지는 문제가 있다. 그리고 현재의 여러 기기에서 제공하는 다양한 화면 크기나 해상도에 비추어 보면 픽셀크기나 개발 시점의 보여지는 모습에 의존한 요소 배치는 한계가 있음을 동의할 것이다.

    이렇게 스타일이나 테마, 폰트 종류나 화면 크기에 관계없이 융통성있는 UI를 만들기 위한 요소가 바로 레이아웃이다. 미리 정해진 틀속에 개별 구성 요소를 배치하는 방식으로, 프로그램에서는 틀에 전체적인 컨트롤을 지정하면 각 레이아웃이 포함된 구성요소의 표시를 책임진다. 이런 레이아웃은 데스탑 응용에서도 활용되고 있는데, 대표적인 것이 바로 이클립스에 적용되어 있는 RCP(Rich Client Platform)이다.

    • Linear Layout : 구성요소들을 순서대로 이어서 표시하는 레이아웃으로 Orientation에 따라 수직으로(Vertical), 수평으로(horizontal) 배치한다. 
      (참조 샘플 : http://developer.android.com/resources/tutorials/views/hello-linearlayout.html)
    • Relative Layout : 구성요소들을 레이아웃이나 구성요소를 기준으로 어디에 배치할 것인지를 지정하는 방식이다. 

      그림에서 보듯이 "Medium Text"는 Layout to right of @+id/textView1로 지정한 것처럼 TextView의 우측에 배치하고 Layout align top @+id/textView1로 TextView의 꼭대기에 맞추는...방식이다. 첫번째 텍스트는 Layout align parent left와 Layout align parent top이 true로 되어 있는데 parent가 레이아웃이므로 기준점이 레이아웃인것이다. 캔버스에 각 요소별로 기준점이 어디인지 화살표로 나타내준다. 
      Realtive layout 상태에서는 상단에(화살표) Center Vertically, Center Horizontally, Show Constraints, Show All Relationships라는 버튼이 추가로 생기므로 풍선 도움말을 참조하여 적절히 사용한다. (Graphical Layout Editor 에서도 직전 작업 취소, Ctrl+Z를 지원하므로 상세한 설명보다는 과감한 시도를 추천한다)
      (참조 샘플 : http://developer.android.com/resources/tutorials/views/hello-relativelayout.html)
    • Frame Layout : 구성요소들을 좌상단을 기준으로 겹쳐서 배치하는 가장 단순한 형태의 레이아웃이다. 먼저 추가된 요소가 아래로 내려간다. 필요에 따라 visible을 조정하는 방식으로 사용하거나 탭구성에 응용하기도 한다.
    • Include Other Layout : 다른 XML Layout을 그대로 포함시킬 때 사용한다. 예제에서는 main.xml XML Layout을 사용하고 있는데 이와 같은 다른 사용자 XML Layout을 내포하거나 아래 그림과 같이 시스템 레이아웃을 불러들일 수 있다.

    • Table Layout : 그림과 같이 Table Row 레이아웃과 연과지어 구성요소를 배치하는 형태이다.
      (참조 샘플 : http://developer.android.com/resources/tutorials/views/hello-tablelayout.html)
    • Table Row : Table Layout을 구성하는 요소로 Table Row를 선택하면 상단에 Remove Table Row, Add Table Row 버튼이 추가되어 행 추가나 삭제가 가능하다.

    * UI 구성에 사용 할 수 있는 다양한 위젯 알아보기
    아래에 나열한 위젯들은 파레트에서 캔버스로 끌어다 놓고 필요한 속성을 설정하는 방법으로 사용한다.


    * 시작이 반이다.
    많은 IDE처럼 안드로이드에서도 Drag & Drop, 끌어다 놓는 방식으로 쉽게 쉽게 사용자 인터페이스(UI)를 제작할 수 있음을 확인 했다. 물론 Graphic Layout Editor와 동시에 XML을 직접 수정하는 것도 익힐 것을 추천한다.

    기능 만큼이나 UI 디자인은  좋은 어플의 필수 요소이다. 여러가지 UI 디자인 실습으로 안드로이드 환경에 보다 친숙해질 수 있기를 기대해 본다. 

    UI가 준비 되었다면 남은 것은 이벤트 처리를 하고, 데이터나 통신등 본격적으로 프로그래밍 언어가 개입하는 시점이다. 이것 또한 따라하기나 샘플, Reference(http://developer.android.com/reference/packages.html) 등을 참조하면서 필요(Needs)를 따라 배워가는 것도 방법이다. 피부에 닿는 학습이야 말로 시간과 노력을 아끼는 남는 장사다.

    벽하거사 2013-11-14 (목) 16:49:57
    많은 도움이 되었습니다.
    고맙습니다..
    『유나아빠』 2013-11-01 (금) 11:51:06
    좋은하루되세요~
    빰빠밤~!. 『유나아빠』님 축하드립니다.
    댓글이벤트에 당첨되어 3P 가 적립되셨습니다.
    한여름날의꿈 2013-10-29 (화) 11:09:29
    아 프로그램은 어려워 ㅠ 감사합니다 ㅎ
    빰빠밤~!. 한여름날의꿈님 축하드립니다.
    댓글이벤트에 당첨되어 5P 가 적립되셨습니다.
    천방지축 2013-10-29 (화) 10:40:31
     
    감사합니다....
    사막의장미 2013-10-29 (화) 10:35:42
    역시 프로그램 만드는건 쉽지 않네요~
    세계를품다 2013-10-29 (화) 08:13:44
    감사6
    Oollalla 2013-10-29 (화) 00:22:51
    좋은 정보 감사합니다.
    라떼로주세요 2013-10-28 (월) 17:47:02
    앱개발에ㅡ대한 내용인가봐요
    길태 2013-10-28 (월) 15:52:57
    감사합니다
    서현서진서율… 2013-10-28 (월) 15:37:00
    감사하긴 한데....
    이건 알아야 면장을 하지.... ㅠㅠ
    알람방구 2013-10-28 (월) 13:46:43
    감사합니다.
    뽀대 2013-10-28 (월) 13:41:39
    ㅎㅎ 난 몬소리인지 당최 ㅋ
    댓글을 작성하시려면 로그인을 하셔야지만 작성가능합니다. [로그인하기] [회원가입하기]
    번호 제목 글쓴이 추천 조회 작성일
    공지글 이거슨 꿀팁!! 작성 가이드 v1.1 (2013-11-13) +174 더어플 42 140756 13/03/12
    4460 알뜰폰 통화 데이터 무제한 밀리의서재 e북 포함 최저가… iamgood 0 757 24/06/11
    4459 알뜰폰 6기가 540원부터 5G망 15기가 5,500원까지 iamgood 0 1902 24/06/03
    4458 반올림피자에서 진행중인 도구리 콜라보 이벤트 리하린 0 1736 24/05/31
    4457 태블릿PC에 알뜰폰 유심 넣어 쓸 때 980원부터 iamgood 0 2443 24/05/23
    4456 알뜰폰 요금제 검색하면서 2만명 넘게 선택한 1,500원요… iamgood 0 3230 24/05/16
    4455 알뜰폰 1Mbps 3Mbps 무제한요금제 최저가2개 iamgood 0 3996 24/05/03
    4454 알뜰폰 쓸 때 인터넷과 결합하려면 iamgood 0 5702 24/04/15
    4453 해외여행 갈 때 데이터로밍 간편하고 싸게 쓰는방법 iamgood 0 6166 24/04/08
    4452 기프티콘은 컬쳐랜드 쿠폰거래소에서 이용하는 게 좋아요 리메인2 0 6318 24/04/05
    4451 클리오 루즈힐 블룸 다이아 립스틱 5종 홈쇼핑 예정 리하린 0 6451 24/04/03
    4450 데이터 10GB+1Mbps 무제한 6,500원부터 쓸수있네요 iamgood 0 6122 24/04/01
    4449 3월 알뜰폰 가성비 평생요금제 2가지 6GB 6천원과 10GB … iamgood 0 6653 24/03/18
    4448 컬쳐랜드에 쿠폰거래소가 새롭게 생겼어요 리하린 0 6962 24/03/12
    4447 3Mbps 속도 데이터무제한 최저가 검색 iamgood 0 6673 24/03/11
    4446 컬쳐랜드로 호텔 예약하면 좀 더 싸게 갈 수 있어요 리하린 0 7030 24/02/27
    4445 해외여행 데이터로밍 일본 태국 대만 최저가보장 iamgood 0 6883 24/02/19
    4444 기간통신사가 운영하는 데이터센터 MDC iamgood 0 6470 24/02/13
    4443 밀리의서재 무료 구독권 kt알뜰폰 2,200원 무제한요금제 iamgood 0 6632 24/02/02
    4442 KT 갤럭시S24 사전예약(~1/25) 라이브컬러 0 7061 24/01/25
    4441 LG유플러스 인터넷 결합 가능한 알뜰폰 iamgood 0 7013 24/01/18
    4440 데이터 20GB 추가제공이벤트 좋네요 iamgood 0 7488 24/01/08
    4439 1월 추천요금제 데이터 6기가0원과 데이터무제한 6,600… iamgood 0 7160 24/01/02
    4438 아이폰 쓰면 해외여행때 굳이 현지유심 쓸 필요없어요 iamgood 0 8313 23/12/11
    4437 넷플릭스 광고형 스탠다드 KT결제 매달 1,000원 할인 달팽ee 0 7962 23/12/11
    4436 데이터10기가 990원부터 3Mbps무제한 9,000원 iamgood 0 8169 23/12/01
    4435 아싸컴에서 천만원 이벤트 하는 거 찾았다 +1 리하린 1 8216 23/11/20
    4434 skt망 알뜰 통화 데이터 무제한 요금 7개월 5,500원부터 iamgood 0 7857 23/11/15
    4433 우체국에서 판매1위했던 알뜰폰 요금제 iamgood 0 8027 23/11/08