본문 바로가기
Android

[Android] Palette (Containers)

by Ejay 2021. 1. 26.

Spinner

 

스피너란 여러 개의 값 중 1개를 선택하기 위해 사용하는 위젯입니다.

 

먼저 res/values 폴더에 array.xml이라는 파일을 만들고 아래의 내용을 입력하여 배열을 만듭니다.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="planets_array">
        <item>A</item>
        <item>B</item>
        <item>C</item>
        <item>D</item>
        <item>E</item>
        <item>F</item>
        <item>G</item>
        <item>H</item>
    </string-array>
</resources>

이후 activity에서

 <Spinner
            android:id="@+id/spinner"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:entries="@array/spinner_entries"
            android:paddingTop="10dp"
            android:paddingBottom="10dp"/>

entires속성을 추가하여 정의하면 아래와 같이 선택이 가능한 위젯이 나옵니다.

 


RecyclerView

 

recyclerview는 많은 수의 데이터 집합을 영역 내에 유연하게 표시할 수 있도록 만든 위젯입니다.

기존의 ListView는 한 화면에 모든 데이터를 가지고 있어 매번 스크롤을 내릴 때마다 

맨 위의 객체가 삭제되고 새로 생성되고의 반복이지만

 

리사이클 러뷰는 스크롤을 내린다고 가정했을 때

제일 위에 사라져 가는 객체를 아래쪽에 새로 생길 부분으로 재 사용을 하게 되어 더 효율적입니다.

실제의 데이터가 100개든 1000개든 초기에 만든 객체만을 사용을 합니다.

 

좌측이 ListView 우측이 RecyclerView


ScrollView/HorizontalScrollView

 

ScrollView : 수직으로 스크롤하는 기능
HorizontalScrollView : 수평으로 스크롤하는 기능

ScrollView
HorizontalScrollView


 

NestedScrollView

 

한 화면에 여러 개의 스크롤을 사용할 때 사용을 합니다.

 

아래 두 가지의 상황이 맞으면 사용하면 됩니다.

 

  • 이중 스크롤 사용 시 (ScrollView in ScrollView)
  • 스크롤 안에 RecyclerView 사용 시(RecyclerView in ScrollView

ViewPager2

 

ViewPager란 View를 Paging 하는 기능입니다. 즉 우리가 사용하는 View를 슬라이드 쇼처럼 넘겨주는 툴입니다.

 

기존에 있는 ViewPager와는 다르게

  • 수평 페이징만 가능했지만 수직 페이징도 지원
  • Right To Left 페이징 지원

이라는 차이점이 있습니다.


CardView

 

CardView는 아래 사진과 같이 곡선 테두리와 음영을 표시할 수 있는 레이아웃입니다.

  • app:cardBackgroundColor - 배경 색 지정
  • app:cardCornerRadius - 코너 radius지정
  • app:cardElevation - 음영 elevation지정 (값이 클수록 음영을 표시하기 위한 공간이 더 필요함)
  • add:cardMaxElevation - 음영표시 영역 Max값

AppBarLayout

 

몇몇 어플을 보면 스크롤을 내릴 때 상단에 있는 부분이 가려지고 스크롤을 올릴 때 다시 생기는 

것을 본 적이 있으실 겁니다. 그럴 때 AppBarLayout을 사용합니다.

 

위의 빨간색 부분이 사라지는 영역입니다

스크롤을 내리게 되면 위와 같이 빨간색 부분이 사라졌다가

스크롤을 올리면 다시 생기는 것을 확인하실 수 있습니다.


BottomAppBar

 

애플리케이션을 이용하시다가 스크롤을 내려도 하단에 고정되는 부분을 보신 적이 있으실 겁니다.

해당 기능을 담당하는 게 BottomAppBar입니다. AppBarLayout과 함께 사용하여 스크롤을 해보았습니다.

위의 사진을 보면 스크롤을 아래로 내려도 하단에 있는 보라색 바는 유지가 되는 것을

확인하실 수 있습니다.


NavigationView

 

NavigationView란 보통 왼쪽 상단에 위치하는 메뉴 버튼을 터치하거나 손가락으로 화면 왼쪽을 스와이프 하여

나오는 뷰를 말합니다. 모바일 디바이스는 화면이 제한적이라 모든 UI를 담을 수 없기 때문에 해당 기능을 사용하여 

앱의 Activity를 최소화하기 위하여 사용합니다.

 


BottomNavigationView

 

BottomNavigaitionView는 아래와 같이 하단에 포함되는 View를 말합니다.

가이드 상 3~5개를 사용하며 스와이프 해서 화면을 넘기는 것을 권장하지 않습니다.


Toolbar

 

툴바는 앱에서 가장 중요한 액션 또는 가장 자주 사용되는 액션들을 제공하는 앱바를 만들 때 사용합니다.

기존에 사용하던 ActionBar는 View가 아니라 위치나 내부 아이템을 제어하기 힘들었지만

ToolBar는 View이며 다른 View처럼 제어하기가 쉽습니다.

 

우선 res/value/theme/themes.xml파일에서 parent 부분을

Theme.AppCompat.Light.NoActionBar

위와 같이 변경해 주면 액션 바가 사라진 것을 확인하실 수 있습니다.

 

이후 MainActivity.kt에서

setSupportActionBar(findViewById(R.id.toolbar))

위의 코드를 추가하고 애뮬레이터를 동작시키면 ToolBar가 추가된 것을 볼 수 있습니다.

Actionbar와 같은 모습이지만 확실히 ToolBar입니다.

 


TabLayout/TabItem

 

TabLayout은 Tab버튼(TabItem)이 위치한 TabLayout과 화면이 바뀌는 아래쪽의 FrameLayout으로 구성됩니다.

Tabq버튼(TabItem)을 눌렀을 경우 아랫부분의 화면이 바뀌어야 하므로

보통 FrameLayout안에 Fragment를 넣어 구현합니다.

 

 

속성을 먼저 알아보겠습니다.

  • app:tabGravity : 탭의 정렬 방식 옵션
  • app:tabMode : 탭의 표시 방식
  • app:tabIconTink : 아이콘의 색상
  • app:tabSelectedTextColor : 탭이 선택되었을 때 글자 색 변경

등 여러 가지 중 자주 쓰이는 속성입니다.

 


ViewStub

 

ViewStub는 만약 전체 UI의 View가 복잡하고 많지만 실제로 보이는 View의 개수가 많지 않을 때 

즉, 10개의 View가 있지만 실제 보이는 건 2개이고 8개는 특정 조건에서만 보일 경우 나머지

View에 대해 ViewStub를 사용하면 전체 UI를 구성하는 비용이 훨씬 적어집니다.(로딩이 빠름)


<include>

 

레이아웃을 작성할 때 Title이나 Bottom에 똑같은 기능을 가지는 Layout을 여러 Activity에서 사용하는

경우가 많습니다. 그럴 경우 Activity마다 같은 형식의 Layout을 만들어 주는 것보다 inclue라는 속성을

이용하면 하나의 Title 혹은 Bottom레이아웃을 모든 Activity에 적용시킬 수 있습니다.

 


<fragment>

 

fragment란 하나의 액티비티에서 여러 개의 화면 가질 수 있게 만들기 위해 생긴 개념입니다.

 

예를 들어

위와는 다르게 핸드폰으로 보면 메모의 주제만 나오지만 태블릿 같이 큰 화면을 사용하면

메모의 주제와 내용이 나오는 것을 알 수 있습니다.

 

프래그먼트의 특징

  • 액티비티를 분할하여 화면의 한 부분을 정의한다.
  • 액티비와 같이 레이아웃, 동작 처리, 생명주기를 가지는 독립적인 모듈이다.
  • 다른 액티비티에서도 사용할 수 있어 재사용성이 뛰어나다.
  • 액티비티 내에서 실행 중에 추가, 제거가 가능하다.

프래그먼트의 생명주기


NavHostFragment

 

**ㅈ


<View>

 

뷰 컨테이너는 다른 View를 포함하고 있거나 포함할 수 있는 View를 말하며

일반적으로 ViewGroup을 상속하면서 Layout이 아닌 클래스를 지칭합니다.

 

자주 사용되는 뷰 컨테이너를 정리하면

ScrollVIew, HorizontalScrollVIew, ListVIew, TabHost, GridVIew 등이 있습니다.


<requestFocus>

 

특정 뷰에 requestFocus를 걸면 그쪽으로 포커스가 이동됩니다.


 

반응형

'Android' 카테고리의 다른 글

[Android] Focus  (0) 2021.01.27
[Android] Fragment 생명주기  (0) 2021.01.27
[Android] Palette (Widgets)  (0) 2021.01.26
[Android] Palette (Button)  (0) 2021.01.26