[내배캠 Android 4기] TIL 사전캠프 10일차

오리너구리·2024년 5월 13일
0

TIL

목록 보기
10/48
post-thumbnail

TIL (Today I Learned)

오늘 계획

  • Android 개발 종합반 3주차 강의
  • 코드카타 4번

01 Android 개발 종합반 3주차

ㅇ 오늘은 3-1 3-2까지만 들었다.

메인화면 레이아웃 구성, 질문지 화면 UI 만들기를 했다.

만든 메인화면 레이아웃

메인화면은 엄청 간단해서,
새로 배운 거는 배경에 그라디언트 넣기? 정도였다.
그것도 엄청 간단함.

그라디언트 만들기

drawable 폴더에 새로 xml 파일 생성해주고,

<?xml version="1.0" encoding="UTF-8" ?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#37C16F"
        android:endColor="#1D8FC8"
        android:angle="90"/>
</shape>

이렇게 shape, gradient 작성해주면 끝

.
.
그리고 start 버튼을 누르면 다음 페이지(질문지 페이지)로 넘어가게 해주었는데,
Intent를 사용하면 된다. 저번에도 Intent 나왔는데 따로 공부 안하고 따라 치기만 하고 넘어가서
다시 나온 김에 (그리고 많이 사용하는 것 같아서) 따로 공부도 해봤다.

* Intent 란?

Intent :
안드로이드 내의 컴포넌트(Activity, service, broudcast receiver, content provider)가
서로 데이터를 주고 받기 위한 메세지 기능을 하는 메시징 객체

명시적 인텐트 : 메세지를 보낼 대상 액티비티를 지정하여 사용하는 방법
							사용자가 새로운 액티비티를 직접 호출할 때 사용한다.
						
암시적 인텐트 : 안드로이드에서 제공하는 기존 응용프로그램을 실행시키는 방법.
							intent에 어떤 인자를 넣느냐에 따라 전화걸기/ 웹 브라우징/ 갤러리 실행/ 
							음악,동영상 실행 등이 가능하다.

내가 이번 챕터에서 사용한 예시

 btn_start.setOnClickListener {
            val intent = Intent(this@MainActivity, TestActivity::class.java)
            startActivity(intent)
        }

스타트 버튼을 클릭하면, TestActivity(질문지화면) 로 넘어가게함. (명시적 인텐트)

.
.
.

질문지 화면 구성은 처음 보는 애들이 좀 많이 나왔는데,



이렇게 MBTI의 요소들을 하나씩 파악하기 위해 3가지 질문을 하는 레이아웃을 만들어야 하는데,
다음 창으로 넘어갈 때마다 새로운 액티비티를 만들면 비효율 적이기 때문에,
viewpager라는 기능을 사용해서 페이지를 넘기는 방식을 배웠다.

ViewPager

ViewPager :
페이지 간 전환을 위한 스와이프 동작이 내장 되어 있는 AdapterView

ver1 과 ver2 차이점 :
android: orientation 설정으로 세로 페이징 지원
android: layoutDirection 설정으로 오른쪽에서 왼쪽 페이징 지원
RecyclerView 기반으로 빌드 되어서, DiffUtil 유틸리티 클래스 접근 가능

사용(세팅)하는 방법

01. 라이브러리 추가

implementation("androidx.viewpager2:viewpager2:1.0.0")
추가하고 싱크해주기 


02. Fragment 만들어주기

1. New Kotlin Class File <적절한이름Fragment> 생성

2. class 위에서정해준이름Fragment : Fragment() //상속받기

여기를 만들어놓고 글자만 바꿔서 질문지를 만들어버릴거임.


03. Viewpager를 컨트롤 하는 Adapter 추가

1. New Kotlin Class File <ViewPagerAdapter.kt> 생성

2. FragmentStateAdapter 상속받기       

		class ViewPagerAdapter(fragmentActivity: FragmentActivity) : FragmentStateAdapter(fragmentActivity)
		추가해주고, 빨간전구 생기는 거 눌러서 Implement Members 눌러서 생성해주기.

3. 2번에서 생성된 getItemCount() 랑 createFragment에 맞게 페이지 수, 02에서 만든 fragment 리턴해주기

04 ViewPager2를 사용할 Activity/Fragment에 배치


1. ViewPager를 사용할 **.kt** 파일에 전역 변수 추가
		private lateinit var viewPager: ViewPager2
		
		
2. ViewPager를 사용할 **.xml** 파일에 viewpager2 배치

			<androidx.viewpager2.widget.ViewPager2
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />     
        
3. .xml 파일에 있는 viewPager **.kt** 파일이랑 연결

        viewPager = binding.viewPager //layout에 있는 뷰 페이저랑 연결
        viewPager.adapter = ViewPagerAdapter(this) //뷰페이저에 어댑터 걸어줌
        viewPager.isUserInputEnabled = false //화면을 좌우 터치로는 넘길 수 없게 만들어줌
     

05 다음 페이지로 넘기는 함수 만들기

fun moveToNextQuestion(){
        if(viewPager.currentItem==3){
            //마지막 페이지 -> 결과화면으로 이동
        }else {
            val nextItem = viewPager.currentItem//현재페이지번호 + 1
            if(nextItem < viewPager.adapter?.itemCount ? : 0){
                 viewPager.setCurrentItem(nextItem, true)
            }
        }
    }

Fragment

**Fragment** :
앱의 전체 UI 에서 어딘가에 반복적으로 재사용 가능한 부분
Activity 가 가지고있는 문제(
	1. activity 안에서 코드가 길어지면 유지보수가 어려워짐.
	2. 안드로이드 디바이스는 휴대폰, 태블릿 등 다양하기 때문에, 태블릿 UI를 고려할 때 단순 Activity로 화면을 그리기에 한계가 있음)
를 해결하기 위해 등장

2번 문제에 대한 방안으로 Fragment가 사용된 예시 태블릿 화면에서는 하나의 액티비티 에 두개의 프래그먼트를 포함 할 수있지만, 휴대폰에서는 하나씩만 가능함.

ㄴ서로 다른 조합으로 Fragment를 재사용 함으로써 태블릿과 휴대폰 화면 모두 지원할 수있는 어플리케이션을 만들 수있다.

02 코드카타

코드카타 4번을 풀었다

https://velog.io/@orinugoori_art/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-CODEKATA-04-%EB%82%98%EC%9D%B4-%EC%B6%9C%EB%A0%A5

여담

velog 에서 글 예쁘게 쓰기가 너무 어렵다
보기 좋게 정리해서 나중에 까먹을 때 쉽게 찾아볼 수 있게 하고싶은데
나중에 보려면 눈알 빠질거같음
오늘부터 태그에 그날그날 정리한 내용들 키워드도 같이 적어봐야겠음 그래야 나중에 찾을 수 있을듯?

profile
오리너구리입니다

0개의 댓글