Android-Layout

1 분 소요

  • activity_main.xml은 주로 화면상으로 보여지는 layout개발을 할 때 쓰여진다.
  • 반면 MainActivity.java는 기능과 관련된 이벤트 처리 소스를 개발할 때 쓰인다.
    • ex) 버튼을 눌렀을 때 네이버 홈페이지로 가게 하는 등등

Layout의 종류

  • layout종류는 주로 4가지로 나뉜다. (ConstraintLayout, LinerLayout, FrameLayout, RelativeLayout)

    • 안드로이드 스튜디오는 디폴트값으로 제약 레이아웃으로 설정되어있다.

LinearLayout

  • 가장 간단하면서 가장 자주 쓰인다.
  • 리니어 레이아웃은 상자를 쌓듯이 뷰를 하나씩 쌓을 수 있는 레이아웃입니다.
  • 화면에서 뷰가 차지하는 영역을 상자라고 보고 이 상자를 한쪽 방향으로 쌓을 수 있게 해 줍니다. 그래서 방향을 꼭 지정해야한다.
  • 상자를 위로도 쌓을 수 있고, 바닥에 어느 한방향의 일렬로 놓을 수도 있다고 생각하면 쉽습니다.
  • 화면에서는 뷰를 아래쪽으로 쌓거나 오른쪽으로 쌓을 수 있도록 해주는데 어느 방향으로 쌓을 것인지를 먼저 결정해야 합니다.
  • 방향 속성인 orientation 속성을 이용해 가로 방향은 Horizontal, 세로 방향은 Vertical로 지정합니다.
  • 그다음에는 단순히 쌓기만 하면 됩니다.
  • 아주 쉬운 레이아웃이지만 리니어 레이아웃 안에 다시 리니어 레이아웃을 여러 개 집어넣고 안에 들어간 리니어 레이아웃 각각에 서로 다른 orientation 속성을 설정하여 아주 복잡한 화면도 만들 수 있습니다.

RelativeLayout

  • 제약 레이아웃이랑 거의 비슷해서 잘 안쓰임.
  • 제약 레이아웃이 최근에 생긴거라 이제 얘는 거의 안쓰일듯
  • 아래와 같이 상대적인 위치로 뷰를 배치한다.

FrameLayout

  • 가장 상위에 있는 뷰나 뷰그룹만 보이게 하는 레이아웃
  • 여러 개의 뷰가 들어가면 중첩됨
  • 많은 뷰를 중첩시켜놓고 화면을 전환시키는 용도로 많이 쓰인다.
  • 한 번에 하나의 뷰만 보여준다. 사실 배치라고 할것도 없다.

뷰 속성값들

  • layout_weight → 값을 할당해줘서 가로 또는 세로의 비율만큼 가져간다.
    • ex) 예를들어 버튼1한테 2 주고 버튼2한테 1주면 버튼1이 전체 레이아웃의 3분의2만큼 공간을 가져가는 형식
    • 공간분할의 역할
  • layout-gravity → 뷰 정렬
  • gravity → 텍스트 정렬
  • layout_margin - 뷰 마진
  • padding - 뷰 내부에서 텍스트 패딩

상태 드로어블

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:state_pressed="true" android:drawable="@drawable/ic_thumb_up_selected" />
        <item android:drawable="@drawable/ic_thumb_up" />
    </selector>
  • 위와 같은 xml 파일을 drawable폴더에 넣으면 동작함.

쉐이프 드로어블

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape android:shape="rectangle">
                <stroke android:width="1dp" android:color="#BE55DA" />
                <solid android:color="#00000000" />
            </shape>
        </item>
    
        <item android:top="1dp" android:bottom="1dp" android:right="1dp" android:left="1dp">
            <shape android:shape="rectangle">
                <stroke android:width="1dp" android:color="#BE55DA"/>
                <solid android:color="#00000000" />
            </shape>
    
        </item>
    </layer-list>
    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <gradient
            android:startColor="#7288DB"
            android:centerColor="#3250B4"
            android:endColor="#254095"
            android:angle="90"
            android:centerY="0.5"
            />
    
        <corners android:radius="2dp" />
    </shape>

카테고리:

업데이트:

댓글남기기