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개든 초기에 만든 객체만을 사용을 합니다.
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 |