• 1나루토매니아
  • 2뱅이
  • 3푸타코타
  • 4완벽그자체
  • 5해삼
  • 1뱅이
  • 2나루토매니아
  • 3알짜배기
  • 4뱅이
  • 5빙그레우유
[안드로이드 앱 개발] 4.UI 만들기
연속출석 :
1일 랭킹 : 2위 별훈5
42%
42% (84989 /200000)
  • 댓글 12 |
  • 추천 3 |
  • 조회 10738 |
  • 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 144089 13/03/12
    1857 청소기에 W(와트) 보이는대로 성급히 판단하지 마라! +5 익스플로러 1 3876 14/12/24
    1856 김치콩비지 레시피 +5 문화상품권 2 3875 15/01/27
    1855 iOS7 패럴랙스-줌 해결책 +13 서현서진서율… 1 3873 13/09/27
    1854 아이크림 사용법 및 사용시 주의사항 +5 익스플로러 2 3872 15/02/21
    1853 구글 검색 잘하는 법 +7 서현서진서율… 3 3871 14/11/07
    1852 우엉 느타리버섯 들깨무침 레시피 +3 문화상품권 2 3870 14/11/08
    1851 배추굴전 레시피 +3 문화상품권 2 3869 14/11/05
    1850 삼성 윈도우폰 Internet Sharing기능 활성화방법 +1 탱구♡ 1 3869 12/08/04
    1849 햄버그스테이크 만드는 법 +6 문화상품권 3 3868 15/01/11
    1848 PC에서 마켓 검색하고 설치하기 +20 굿쏘 11 3867 11/02/20
    1847 아스트로 파일매니저 기초기능 +23 안드로이드 3 3867 11/03/02
    1846 6가지 과일 손질법? +3 dasdads 1 3866 15/02/04
    1845 메모리(RAM) 구입할 때 궁금한 것들! +4 익스플로러 2 3866 14/10/02
    1844 유기농 제품에도 발암 물질이? +7 익스플로러 2 3866 15/01/17
    1843 양파수프 레시피 +3 문화상품권 1 3865 15/02/26
    1842 아이폰, 기능 100% 활용하기 Part.2 ♣서로해♣ 0 3862 12/06/27
    1841 갤럭시탭 리더스 허브 사용 +15 설픈이 7 3862 11/02/28
    1840 내 발에 편한 힐을 고르려면? +5 익스플로러 1 3860 15/02/15
    1839 모빌 사용 시기별 분류 +3 익스플로러 1 3859 15/02/11
    1838 육개장만둣국 레시피 +3 문화상품권 2 3858 14/11/12
    1837 영상 및 음성 케이블별 특장점 팁 +8 익스플로러 3 3858 15/01/02
    1836 액티비티?!-1.버튼,액티비티추가하기 +8 레오쏭 7 3856 11/05/22
    1835 자동차 매트별 장단점 비교팁 +6 익스플로러 3 3855 14/12/06
    1834 갤럭시 노트 카운트 초기화 +4 100 ♣서로해♣ 2 3855 12/06/03
    1833 된장짜장 레시피 +4 문화상품권 2 3853 14/11/19
    1832 모토글램에서 구동확인한 최신 게임들.. +10 아이유수다 3 3848 11/04/25
    1831 붓기가 생기지 않게 하는 생활습관 +5 익스플로러 1 3846 15/01/28
    1830 HTC 디자이어 프로요(안드로이드 OS 2.2) 업그레이드 방… +7 피그래빗 3 3846 10/10/06