코딩 (독학)/★ Kotlin

[CH.★] Android View / View Container / Widget / Layout 등 한번에 살펴보기

짱득이 2022. 1. 12. 16:12
300x250
반응형

* 시작에 앞서

개인 프로젝트, 코딩 과정을 상세하게 기록하고 리뷰하기 위해 작성된 블로그입니다.
공부와 함께 진행되는 스파르타식 프로젝트이므로, 부족한 부분이 많을 수 있습니다.
Feedback은 언제나 환영입니다.

본 포스트는 Android의 View / View Container / Widget / Layout 등에 대하여 각각의 종류, 차이 등등을 기록한 포스트입니다.


시작하기 전 본문에 한번 더 앞서, 다양한 사람의 이해한 방식, 다양한 블로그 포스팅, 다양한 지식, 종류 등 여러가지를 한데 모아 본인도 그리고 누구나 보기 편하고 언제나 모르겠으면 찾아올 수 있는 글을 만들고자 해당 포스트를 아주 길게 작성하게 되었습니다.

 

오늘도 코이팅~


View? Android View? 그게 뭔데? 중요한거야?

View (뷰)는 안드로이드 기본 화면을 구성하는 모든 기본 화면의 구성요소이기 때문에 당연히 중요하다.

 

우리가 Application 에서 보는 Button, Table, ID/PW 입력 칸 등등 모든것이 View 로 칭해지는 것이다.

 

HTML로 예를 들어보면 Image를 나타내는 <img src>도 하나의 View가 되고, <div>, <p>, <a href> 모든것을 View 라고 나타낼 수 있다. (그냥 눈에 보이는건 다 View라고 생각하면 쉽다.)

위 그림을 보면, Layout-1 안에 Layout-1-1과 Layout-1-2 그리고 Layout-1-2 안에 Button 이 존재한다.

이 처럼 View는 또 다른 다양한 View를 포함할 수 있고, 중첩적으로 사용할 수 있다.

 

이때 뷰 중에서 눈에 보이는 Button과 같은 것들을 Widget이라 부르고, 눈에 보이지 않는 것들은 Layout이라고 부른다.

 

Layout은 안에 다른 View들을 담아둘 수 있는데, Layout도 뷰를 상속하여 정의했기 때문에 Layout 안에 또 Layout도 담을 수 있다.

Layout 안에 Layout, 또 그 Layout 안에 Layout을 넣는 방식을 사용해 당연 복잡 해 지겠지만 Dynamic한 연출할 수 있게 된다.

 

예시를 트리로 표현하면 아래와 같은데, 다양한 android.Widget과 android.View가 적절히 섞여 View를 표현하고 있다. 

(출처 :&amp;amp;amp;amp;nbsp; https://www.crocus.co.kr/1545 )


위 내용을 간략히 정리 해 보자면, 아래와 같다.

 - View의 역할은 굉장히 다양하다.

 - Developer 측면에서의 View와 User 측면에서의 View는 같은 기능(화면에 정보를 표현하고 기능을 제공)을 수행하며,

   또 다른 방식으로 표현되고 가공될 수도 있다.

 

Widget : 화면에서 보이는 Button 이나 Layout, CheckBox 등등을 User 단에서 부를 때 Widget이라 한다.

View : Developer 입장에서 Widget에 해당하는 Code를 View 라고 한다.

출처 :&amp;amp;amp;amp;nbsp;https://wonit.tistory.com/160

 


View Container 는 무엇인가?

 - 뷰 컨테이너(View Container)는 다양한 View 들을 포함할 수 있는 Widget을 부르는 용어

 - Layout은 Widget을 다양하게 배치할 수 있도록 하지만, View Container는 정해진 형태 아래에서 여러 Widget을 보여준다.

 - 주로 사용하는 뷰 컨테이너의 종류는 5가지로, 아래와 같다.


뷰 컨테이너 종류 1 - ScrollView (스크롤뷰)

 - 스크롤 할 수 없는 뷰를 스크롤 가능하게 해 주는 컨테이너.

 - ImageView의 Image가 화면의 최대 높이보다 클 경우 사용자는 화면 전체를 볼 수 없게 되는데, 스크롤뷰로 감싸주면 스크롤 하면서 전체를 볼 수 있게 된다.

 - 단, 스크롤뷰는 한개의 뷰만을 포함할 수 있기 때문에, 여러개의 위젯을 넣고 싶다면 레이아웃으로 감싸주어야 한다.

 

아래 코드는 스크롤뷰의 샘플 코드이다.

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="300dp"
            android:gravity="center"
            android:background="#FF0000"
            android:text="RED" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="300dp"
            android:gravity="center"
            android:background="#00FF00"
            android:text="GREEN" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="300dp"
            android:gravity="center"
            android:background="#0000FF"
            android:text="BLUE" />
    </LinearLayout>
</ScrollView>

<ScrollView /> 태그 안에 <LinearLayout /> 태그로 감싸져 있는것을 확인할 수 있다.


뷰 컨테이너 종류 2 - HorizontalScrollView (수평 스크롤뷰)

 - 수평 방향 (<-->) 으로 스크롤할 수 있다는 것을 제외하고는, 스크롤 뷰와 거의 비슷하다.

 

아래는 수평 스크롤 뷰의 샘플 코드이다.

<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

        <TextView
            android:layout_width="300dp"
            android:layout_height="match_parent"
            android:gravity="center"
            android:background="#FF0000"
            android:text="RED" />

        <TextView
            android:layout_width="300dp"
            android:layout_height="match_parent"
            android:gravity="center"
            android:background="#00FF00"
            android:text="GREEN" />

        <TextView
            android:layout_width="300dp"
            android:layout_height="match_parent"
            android:gravity="center"
            android:background="#0000FF"
            android:text="BLUE" />
    </LinearLayout>
</HorizontalScrollView>

형식은 ScrollView와 동일하고, 태그만 <HorizontalScrollView /> 로 변경 된 것을 확인할 수 있다.


뷰 컨테이너 종류 3 - RadioGroup (라디오 그룹)

 - 여러 개의 라디오 버튼을 묶어서 사용자가 그 중 하나만 선택할 수 있도록 해 주는 컨테이너이다.

 - 라디오 버튼은 반드시 하나만 선택할 수 있고, 다중 선택은 불가능하다.

 - 다중 선택이 필요하다면 CheckBox 컨테이너를 사용하면 된다.

 

아래는 라디오 그룹의 샘플 코드이다.

<RadioGroup
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Option 1" />

    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Option 2" />

    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Option 3" />

    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Option 4" />
</RadioGroup>

<RadioGroup /> 태그 안에 <RadioButton /> 태그로 감싸져 있는 앞전과는 다른 형태임을 확인할 수 있다.

 

* <RadioGroup /> 내에 <RadioButton /> 태그가 존재하지 않는 경우(Button이 Group의 밖에 있거나)라면 ?

상위 두개의 버튼은 <RadioGroup />이 함께 있지 않고, <RadioButton />태그만 단독으로 쓰인 단독 라디오 버튼의 경우이다.

하위 두개의 버튼은 <RadioGroup /> 내에 <RadioButton /> 이 존재하는 일반적인 경우이다.

 

RadioButton은 개념적으로 나열된 버튼들 중 단독으로만 선택이 가능한데, 상위 두개의 버튼은 선택이라는 개념이 없어져버려서 2개 모두 중복으로 선택은 가능하지만, 메소드 없이 클릭된 버튼을 해제 할 수도 없고 결국 의미없는 쓰레기 버튼이 되어버리는 것이다.

 

아래에 있는 정상적인 두가지 버튼은 1번을 누른 뒤 2번을 누르면 1번의 체크가 해제되면서 변화하는것을 확인할 수 있다.

 

결론적으로 <RadioButton /> 태그는 <RadioGroup /> 태그 내에 존재해야 한다는 것.

 

출처 : https://yoo-hyeok.tistory.com/55


뷰 컨테이너 종류 4 - CardView (카드뷰)

 - 내용을 카드 형태로 표현할 수 있는 View Container.

 - Android 5.0 (API 21) 부터 도입되었기 때문에 5.0 미만 버전에서 CardView를 사용하기 위해서는 아래 링크와 함께 지원 라이브러리를 추가 해 주어야 한다. (혹은 Activity Design 부분에서 Container에서 카드뷰를 찾아 다운로드 버튼을 클릭해도 된다.)

=> implementation 'com.android.support:cardview-v7:27.1.1'

 - 일반적으로 RecyclerView의 Item을 표시하는 용도로 많이 사용된다.

 

아래는 CardView의 샘플 코드이다.

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:layout_margin="10dp"
    card_view:cardBackgroundColor="@color/colorPrimary"
    card_view:cardCornerRadius="8dp"
    card_view:cardElevation="8dp"
    card_view:contentPadding="10dp">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/darker_gray"
        android:gravity="center"
        android:text="TEXT" />
</android.support.v7.widget.CardView>
CardView Attribute (카드뷰 속성)
xmlns:card_view 카드뷰의 속성을 사용하기 위해 선언하는 xml namespace 이다.
card_view:cardBackgroundColor 카드뷰의 배경 색상을 지정한다.
card_view:cardCornerRadius 카드 모서리의 반지름을 지정한다.
card_view:cardElevation 카드 그림자를 표시한다.
card_view:contentPadding 내부 내용을 보여주기 위한 패딩이다.

뷰 컨테이너 종류 5 - RecyclerView (리사이클러뷰)

 - Image나 Text를 List화 해서 Scroll 하면서 볼 수 있게 해주는 컨테이너.

 - 기존에 사용하던 ListView나 GridView에 성능적인 문제가 있었고, Customizing도 불편했기 때문에 새로이 도입되었으며, 리사이클러뷰를 사용하면 다양한 형태의 View를 간편하게 구성할 수 있게 되었다.

 - CardView와 마찬가지로 Android 5.0 (API 21)부터 도입되었기 때문에, 5.0 미만 버전에서 사용하려면 아래와 같은 지원 라이브러리를 추가해야 한다.

 implementation 'com.android.support:recyclerview-v7:27.1.1'

 

리사이클러뷰를 이해하려면 아래와 같은 구조를 이해해야 한다.

 

1) LayoutManager ?

 - 리사이클러뷰의 형태를 결정하는 레이아웃 관리자(Manager)를 말한다.

 - LinearLayoutManager / GridLayoutManager / StaggeredGridLayoutManager 등이 있다. 만약 또 다른 형태를 원한다면 직접 만들어서 사용해야 한다.

LinearLayoutManager 리니어 레이아웃과 동일한 형태를 가진다.
Option에 따라 Vertical / Horizontal 형태를 바꿀 수 있다.
GridLayoutManager 그리드뷰와 유사한 형태를 가진다.
격자 형태를 가지며, 한 줄에 몇 개의 아이템을 배치 할지 지정할 수 있다.
StaggeredGridLayoutManager Staggered는 '엇갈린', '비틀거리는' 이라는 뜻이다.
아이템을 엇박자로 배치한다.
배치되는 이미지의 높이가 서로 다른 경우에 자주 쓰인다.

2) Adapter ?

 - DataSet과 LayoutManager를 연동 해 주는 역할을 한다.

 - DataSet의 Data를 Layout에 어떻게 배치할지를 결정하는 클래스이다.

 

3) DataSet ?

 - Layout에 보여 줄 Data를 의미한다.

 - Data는 인터넷에 접속해서 가지고 온 데이터일 수도 있고, Android Device에 저장되어 있는 Image가 될 수도 있다. (여러가지)

 - 어떤 데이터든 집합 형태로 저장되어 있어야 한다. 집합 형태는 ArrayList나 Vector 또는 배열 등등을 의미한다.


뷰 컨테이너 종류 (그 외 더 많은 뷰)

1. SlidingDrawer (슬라이딩드로어)

 - 서랍을 뜻하는데, 위젯을 서랍처럼 열어서 보여주거나 닫아서 감춘다.

 

2. ViewFliper (뷰플리퍼)

 - 안에 여러개의 위젯을 배치하고 필요에 따라 화면을 왼쪽, 오른쪽으로 밀어서 하나의 위젯씩 화면에 보여주는 방식

 

3. ListView (리스트뷰)

 - 데이터를 List 모양으로 보여주며 리스트 중 하나를 선택하는 용도로 사용.

 

4. GridView (그리드뷰)

 - 사진, 그림을 격자 모양으로 배치해 줌.

 

5. Gallery (갤러리)

 - 사진, 이미지를 배치하고 좌우로 스크롤해서 볼 수 있게 해줌.

 

6. Spinner (스피너)

 - PC의 DropDown Box와 비슷한 기능을 함. 화면이 작은 스마트폰 안에서 여러 개 중 하나를 선택할 수 있도록 확장하여 옵션을 보여주는 용도로 쓰임.


 

Android Layout ?

Q : "앞에 있는 지식들도 너무 많은데.. 이제는 또 Layout..? 하.. 이렇게 많은걸 외워야 해요?"

A : "그냥 뭐가 있구나 정도만 알아두고, 외우긴 싫으니까 언제든 열어보려고 이렇게 한군데에 정리하고 있잖니?"

갑자기 공부하기 싫어져서 끄적여봤다..ㅎㅎㅎ

 

 - Layout은 ViewGroup 클래스로부터 상속받으며 내부에 무언가를 담는 용도로 쓰인다.

 - Layout 안에 존재하는 Widget을 유연하게 배치할 수 있도록 하는 역할 톡톡이다.

 - 각종 View들을 화면 내에서 정렬하기 편하도록 해 주는 역할을 한다.

 


Android Layout 종류

1. LinearLayout (리니어 레이아웃)

 - 또는 선형 레이아웃으로 부르며, 레이아웃 좌상단을 시작점으로 하여 수직(아래쪽) 또는 수평(오른쪽)으로 차례대로 배치한다.

 - 가장 기본적으로 사용되는 Layout이라고 해도 될 정도로 많이 쓰인다.

 

LinearLayout Sample Code (with.Kotlin)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
</LinearLayout>

 

LinearLayout Sample Image

출처 :&amp;amp;amp;amp;nbsp;https://stackoverrun.com/ko/q/11355733

공통 속성

  • orientation : Layout 내의 Widget의 수직/수평 방향을 설정
  • gravity : Layout 내의 Widget의 정렬 방향을 설정
  • padding : Layout 내의 Widget의 여백 설정
  • layout_weight : Layout이 전체 화면에서 차지할 공간의 가중치 값으로, 여러 Layout이 중복될 때 사용
  • baselineAligned : Layout 안에 배치할 위젯을 보기 좋게 정렬

찰떡같은 이미지를 만들어 주신https://crone.tistory.com/340?category=851524 블로거님 감사합니다.

orientation

1. android:orientation="vertical"          : 요소들을 수직(아래쪽)방향으로 content를 배치 (위 사진에서 왼쪽 컷)

2. android:orientation="horizontal"       : 요소들을 수평(오른쪽)방향으로 content를  배치 (위 사진에서 오른쪽 컷)

gravity

gravity Option은 Layout 내에서 Widget을 어디에 배치할까? 에 대한 결정을 할 수 있게 한다.

결정 옵션 값으로는 다음과 같다.

  • left
  • right
  • center
  • bottom
  • top

또한 2개를 조합하여 right | bottom 처럼 값을 줄 수도 있다.

 

LinearLayout gravity option Sample Code (with.Kotlin)

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="right">

</LinearLayout>

2. RelativeLayout (릴레이티브 레이아웃)

 - 사전적 의미로 상대적인 이라는 의미를 담고있는 레이아웃이기 때문에, 상대 레이아웃이라고도 부른다.

 - Widget 자신이 속한 레이아웃의 상하좌우 위치를 지정하여 배치하거나, 다른 Widget으로부터 상대적인 위치를 지정한다.

 

* 위치 배치 관련 7가지 속성 값과 위치 설명

출처 : https://wonit.tistory.com/165?category=775588

버튼을 각각의 위치로 배치하고 싶다면 위젯 속성에서 위치에 맞게 layout_속성="true"로 아래 코드 예시처럼 설정하면 된다.

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        
        android:layout_centerHorizontal="true"
        android:layout_alignParentTop="true"
        android:text="Top/center"
        				or
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:text="left/vertical"
        				or
        android:layout_centerInParent="true"
        android:text="center/center"
        				or
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:text="right/center"
        				or
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:text="bottom"
        />
        
</RelativeLayout>

 

 

* 다른 위젯의 상대 위치에 배치하기

 - 다른 위젯의 상대적 위치에 배치하는 기능은 기준 위젯의 id 값을 지정해서 사용한다.

 - "@+id/기준 Widget ID" 의 형식으로 사용한다.

<Button
        android:id="@+id/baseBtn/>

<Button
        android:layout_alignTop="@+id/baseBtn/>

위와 같이 작성하면, baseBtn을 기준으로 layout_alignTop 위치로 배치를 시도하게 된다.

(출처 : https://wonit.tistory.com/165?category=775588)

 

 

* 요소 2에 대한 요소 1의 상하좌우 relative 설정

출처 : https://crone.tistory.com/340 출처의 글 작성자분께서 직접 만드신 PPT인데, 정말 감사드립니다. 설명에 찰떡그림..실화?

 

android:layout_toLeftOf=""
android:layout_toRightOf=""
android:layout_above=""
android:layout_below=""
  • toLeftOf = left : 요소 1을 요소 2의 왼쪽에 배치
  • above = on / top (위쪽) : 요소 1을 요소 2의 상단(위)에 배치
  • toRightOf = right : 요소 1을 요소 2의 오른쪽에 배치
  • below = down / bottom (아래쪽) : 요소 1을 요소 2의 하단(아래)에 배치
android:layout_alignTop=""
android:layout_alignBaseline=""
android:layout_alignBottom=""

android:layout_alignLeft=""
android:layout_alignRight=""
  • alignTop = 상단
  • alignBaseline = 중앙
  • alignBottom = 하단
  • alignLeft = 좌측
  • alignRight = 우측

 

3. TableLayout (테이블 레이아웃)

- 주로 Widget을 표 (Table) 형태로 배치할 때 사용한다.

 - LinearLayout을 상속하는 단순한 LayoutManager 역할을 한다.

 - 행과 열의 관계로 관리/수정 하고, Widget을 배치한다.

 - <TableRow /> 태그로 행을 표시하고, <TableRow /> 안에 있는 Widget의 수로 열을 나타낸다.

 

출처 : 한빛 아카데미(저) android studio를 활용한 android programming

<TableLayout>

    <TableRow>
        ...
    </TableRow>

    <TableRow>
        ...
    </TableRow>

</TableLayout>

 

<TableLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <TableRow>
        <TextView android:text="요소1"></TextView>
        <TextView android:text="요소2"></TextView>
        <TextView android:text="요소3"></TextView>
        <TextView android:text="요소4"></TextView>
    </TableRow>

구성하는 예시는 위와 같고, <TableRow /> 태그 하나를 만들어 연결될 열을 나열하여 요소를 만드는 형태로 구성한다.

 

TableLayout의 속성

layout_span : 열을 합쳐서 표시하라는 의미로, layout_span="2"는 현재 셀부터 2개의 셀을 합쳐서 표시 해 준다.

layout_column : 지정된 열에 현재 Widget을 표시하라는 의미

stretchColumns : 지정된 열의 폭을 늘리라는 의미.


4. GridLayout (그리드 레이아웃)

 - Table Layout과 비슷하지만, 행 또는 열을 확장(병합 등)하여 다양하고 유연하게 배치할 때 더 편리하다.

 - 위에서 봤듯이 TableLayout에서는 Column / Row 를 지정할 때 TableRow의 갯수에 따라 지정이 되었지만 GridLayout은 속성     을 직접 지정하기 때문에 훨씬 직관적이다.

 - 당연히 TableLayout보다 훨씬 직관적이기 때문에 TableLayout보다 훨씬 더 많이 쓰인다.

 - 참고로 GridLayout은 Android 4.0 (Icecream sandwich)부터 지원된다.

TableLayout의 속성

  • rowCount : 행의 수를 표현할 때 사용한다. (행의 수를 카운트)
  • columnCount : 열의 수를 표현할 때 사용한다. (열의 수를 카운트)
  • orientation : Grid를 수평방향 우선으로 할지, 수직방향 우선으로 할지 결정한다.
  • layout_row, layout_column : 각각 자기 자신의 행 또는 열 번호를 지정한다.
  • layout_rowSpan, layout_columnSpan : 행 또는 열을 지정된 수 만큼 확장할 때 사용한다.
  • layout_gravity : 주로 fill, fill_vertical, fill_horizontal 등으로 지정하는데, layout_row(column)Span으로 확장된 열 또는 행에 위젯을 꽉 채워 맞춰주는 역할을 한다.

ex) 2행 3열을 지정한다고 했을 때, 2가지 속성을 지정 해 주면 된다.

1. layout_row

2. layout_column


5. FrameLayout (프레임 레이아웃)

 - Widget을 좌상단에 겹쳐서 배치하여 중복되어 보이는 효과를 낼 수 있다.

 - 여러 개의 Widget을 배치한 후 상황에 따라서 필요한 Widget을 보이는 방식에 주로 활용된다.

 - Frame, 액자 라는 의미로 Contents들이 겹겹이 쌓여 제일 앞에 놓여있는 컨텐츠가 사용자에게 보이는 형태인 레이아웃이다.

출처 :&amp;amp;amp;amp;nbsp;https://crone.tistory.com/340

A, B, C의 Contents가 겹쳐 있지만 가장 위에 보이는 C 컨텐츠가 가장 위로 올라와 있으므로

사용자에게는 C가 보이는 형태의 layout이 FrameLayout이다.

 

특히 여러개의 Contents를 추가 하였으며 조정을 별도로 하지 않았을 때 가장 마지막에 추가된 View가 가장 전면에 표시된다.

 * FrameLayout 위치 조정 옵션
top                      : 부모 레이아웃 내 상단에 위치
bottom                   : 부모 레이아웃 내 하단에 위치
left                     : 부모 레이아웃 내 좌측에 위치
right                    : 부모 레이아웃 내 우측에 위치
center_vertical          : 세로방향 기준으로 가운데 위치
fill_vertical            : 세로 방향으로 가득 채움
center_horizontal        : 가로방향 기준으로 가운데 위치
fill_horizontal          : 가로 방향으로 가득 채움
center                   : 가로/세로 방향 기준 가운데 정렬
fill                     : 가로/세로 방향으로 가득 채움
clip_vertical            : 세로방향 기준으로 레이아웃외의 영역은 자름
clip_horizontal          : 가로방향 기준으로 레이아웃외의 영역은 자름
start                    : 부모 레이아웃 내 시작점 위치에 정렬
end                      : 부모 레이아웃 내 시작점 끝점에 정렬

6. ConstraintLayout (컨스트레인트 레이아웃)

 - Layout 구성 시 Widget의 위치와 크기를 유연하게 조절할 수 있게 해주는 Layout이다.

 - "Constraint" = "제약" 이라는 의미로, 여러 제약을 적용하여 Widget의 위치와 크기를 결정한다.

 - 각각의 제약 조건을 만족시키는 Layout으로 구성되고 화면에 보여진다.

출처 : https://soohyun6879.tistory.com/12?category=883526

 


Android Widget ? (; 위젯)

앞서 자주 나오던 Widget의 종류에 대해 조금 더 세세하게 정리 해 볼까 한다.

 

1. TextView (텍스트뷰)

 - 텍스트를 일반적으로 문자열 형식으로 표현하는 위젯, 문자열이 화면에 고정됨.

 - User가 수정할 수 없는 문자열이다.

 

문자열을 표현하는 방법에는 아래와 같이 두가지 방법이 있다.

  • TextView를 정의하는 xml 속성에서 직접 값을 넣는 경우 (좀 더 편리)
  • @string/변수명 형식으로 지정한 후 string.xml 파일에서 값을 넣는 경우 (권장방법이라는데, 왜 그런지 잘 모르겠음)

* 간단한 Option에 대한 설명

  • android:text="텍스트뷰에 나타내는 문자열을 표현, 문자열 형식으로 값을 직접 지정할 수 있음."
  • android:textColor="글자의 색상을 지정하며 background 속성처럼 #RRGGBB 형식으로 값을 추가한다."
  • android:textSize="글자의 크기를 지정하며 dp, px, in, mm, sp 단위로 지정한다."

지금은 GUI가 너무나도 잘 갖춰져 있어서 xml의 design 탭에서 직접 확인하며 편하게 고칠 수 있고

세세한 값은 Code로 지정하면 편리하다.

 

2. EditText (에디트 텍스트)

 - 문자열을 입력받는 위젯.

 - User에게 입력 받을 수 있음. (사용자의 입력 값에 대한 Data)

 - 아래와 같이 stringData 변수로 담기 위해 getText() 메소드로 text 문자를 가져오고, toString() 메소드로 string 형식으로 변경한 값을 넣어준다.

String = editText.getText().toString();

 

3. Button (버튼)

 - 클릭할 수 있게 하는 것으로, 클릭했을 때 Event를 발생시키는 것을 많이 사용한다.

 - 주로 확인, 취소, +, - 등의 버튼으로 많이 사용하기는 함.

 - setOnClickListener() 메소드를 주로 사용.

button.setOnClickListener(View.OnClickListener() {
................
}

 

4. RadioButton (라디오 버튼) => compoundButton (=Button 클래스의 하위 클래스임.)

 - 다만, 체크박스와 xml / java 메소드가 비슷하지만 용도는 다르다.

 - 사용자가 여러 버튼 중 하나만 선택할 수 있는 버튼이므로, 라디오 버튼을 사용할 때에는 반드시 기억 해야함.

 - RadioGroup도 있는데, 라디오 버튼을 담아주는 일종의 Container 역할을 하며, 라디오 버튼의 범위를 제한하는데 사용되곤 한다.

<RadioGroup
            android:id="@+id/radioGroup">
              <RadioButton
                         android:id="@+id/btn"/>
              <RadioButton
                         android:id="@+id/btn2"/>
</RadioGroup>

 

 

5. CheckBox (체크박스)

                => compoundButton (=Button 클래스의 하위 클래스임.)

 

 - User가 여러 개를 선택할 수 있는 버튼. (항상 서로 독립적으로 동작한다는 특징 덕분)

 - 주로 '체크됨' 과 '체크되지 않음' 등으로 나타냄

 - 클릭될 때 마다 상태가 'Check' 또는 'UnCheck'로 바뀌게 됨.

 - android:checked의 기본 default 값은 false임을 알 수 있다.

 

<CheckBox
          android:id="@+id/androidBox"
          android:text="안드로이드 휴대폰"
          android:checked="true" />
<CheckBox
          android:id="@+id/iphoneBox"
          android:text="아이폰 휴대폰" />

왼쪽과 같은 코드는 오른쪽과 같은 결과를 내 놓으며, 독립적으로 작동하기 때문에 둘 다 체크가 가능하다.

 

6. Switch / ToggleButton (스위치 / 토글버튼) => compoundButton (=Button 클래스의 하위 클래스임.)

 - 스위치와 토글버튼은 모양만 조금 다를 뿐, 용도는 거의 비슷함.

 - 주로 On/Off 상태 표시를 나타내는데 사용함.

출처 : http://klutzy.github.io/

<ToggleButton
              android:id="@+id/tgBtn1"
              android:checked="true"/>
<ToggleBUtton
              android:id="@+id/tgBtn2"/>

출처 :&nbsp;https://wonit.tistory.com/163?category=775588

 

 

 

 

 

7. ImageView / ImageButton (이미지뷰 / 이미지버튼)

 - ImageView는 단순히 이미지 출력 기능

 - ImageButton은 말그대로 이미지를 누르면 버튼으로 작동하는 용도로 사용. (그림으로 표현된 버튼)

 

 


출처 : https://wonit.tistory.com/163?category=775588 

출처 : https://soohyun6879.tistory.com/12?category=883526

728x90
반응형