-
[Android/Kotlin] 인프런 강의 시작! (Feat. [왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린)IT Study/Android 2023. 11. 8. 21:28728x90
안드로이드 시작합니다! (아, 재밌겠다!!!!!!)
1. 파일 구성
MainActivity (화면에 있는 요소를 제어하는 파일)
/res/layout/activity_main.xml (화면을 구성하는 파일, 레이아웃을 꾸미고 확인할 수 있는 파일)
Gradle (라이브러리를 가져올 수 있는 폴더)
/res/values/color.xml (컬러 팔레트 지정할 수 있는 파일)
2. 단축키 (MacOS 기준)
import 시, Option + Enter
코드 정렬 시, Option + Cmd+ L
네이밍 변경 시, Shift + F6
찾아 모두 변경 시, Cmd + F, Cmd + R
3. 레이아웃의 종류
1) LinearLayout : 선형으로 쌓이는 구조 (빈 공간을 채우는 형태로 쌓이는 구조, 수평/수직으로 요소들을 배치)
2) RelativeLayout: 다른 요소와의 상대적인 위치를 지정하여 배치
3) ConstraintLayout: 요소들 간의 관계와 제약 조건을 설정하여 유연하게 배치너비 전체 차지
<LinearLayout layout_width="match_parent" ...>
내부 내용을 감쌀 정도의 높이 차지
<LinearLayout layout_height="wrap_content" ...>
수직 정렬 시
<LinearLayout android:orientation="vertical" ...>
사이즈 꽉 채우기 (눌림 없이)
android:scaleType="center"
4. 변수 선언
// id가 bts_img_1로 설정된 ImageView 요소를 찾아 변수에 할당 val img1 = findViewById<ImageView>(R.id.bts_img_1)
5. Handler (Feat. Handler + Looper, 코루틴)
핸들러는 1. 별도 스레드로 작업 후 UI 작업하는 업데이트나 2. 일정 시간 딜레이 후 UI 작업 진행하기 위해
주로 사용했으나, 사용이 중지되었습니다. (deprecated)
이제는 사용 중지된 코드 (아래 코드 적용 불가)
Handler().postDelayed({ startActivity(Intent(this, MainActivity::class.java)) finish() }, 3000)
이를 대체하기 위한 방법을 확인하던 중
아래의 스택오버플로우 페이지에서 발견한 방법을 통해 대체하여 사용해 봤습니다.
`매개변수가 없는 생성자만 더 이상 사용되지 않습니다.
이제 Looper.getMainLooper() 메서드를 통해 생성자에 Looper를 지정하는 것이 좋습니다.`
Handler(Looper.getMainLooper()).postDelayed({ startActivity(Intent(this, MainActivity::class.java)) finish() }, 3000)
또한 아래의 블로그 글을 통해 코루틴을 발견하여 이를 사용하기로 했습니다.
private val splashDelay: Long = 3000 CoroutineScope(Dispatchers.Main).launch { delay(splashDelay) startActivity(Intent(this@SplashActivity, MainActivity::class.java)) finish() }
6. 타이틀 바 삭제하기
/res/values/themes.xml을 통해 타이틀 바 삭제하기
<style name="Base.Theme.Albumtwice" parent="Theme.AppCompat.Light"> <item name="windowNoTitle">true</item> </style>
7. 데이터 바인딩 (Data Binding)이란?
데이터 바인딩은 뷰와 데이터(모델)를 자동으로 연결해 주는 안드로이드 앱 개발 기술
기존에는 findViewById로 뷰를 찾아와야 했지만, 데이터 바인딩을 사용하면
XML 레이아웃 파일에서 뷰와 데이터를 바로 연결할 수 있다.
이를 통해 코드 양을 줄이고 가독성과 유지 보수성을 향상하고, 뷰와 데이터 간의 일관성을 유지하며,
뷰에서 발생하는 이벤트나 사용자 입력을 자동으로 데이터에 반영할 수 있다.1) build.gradle(Module) 파일에 데이터 바인딩 enable = true 설정하기
2) xml 레이아웃 파일 설정하기
3) 기존 방식 확인하기 findViewById
// 1번 방식 - findViewById // findViewById 메서드를 통해 뷰를 가져와 이벤트 처리 val btn = findViewById<Button>(R.id.btnId) btn.setOnClickListener { Toast.makeText(this, "Click!", Toast.LENGTH_LONG).show() }
4) 새로운 방식 사용하기 data binding
class MainActivity : AppCompatActivity() { // 2번 방식 (1) - 데이터 바인딩 private lateinit var binding : ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 2번 방식 (2) // DataBindingUtil.setContentView 메서드를 통해 레이아웃과 데이터 바인딩 객체를 연결 binding = DataBindingUtil.setContentView(this, R.layout.activity_main) // 2번 방식 (3) binding.btnId.setOnClickListener { Toast.makeText(this, "Click!", Toast.LENGTH_LONG).show() } } }
'IT Study > Android' 카테고리의 다른 글
[Android] 액티비티의 라이프 사이클 (생명주기, Life cycle) (0) 2024.01.20 [Kotlin] 코틀린 중급 (feat. 람다, 확장함수, Scope function, 초기화 지연 등...) (0) 2024.01.15 [Kotlin] 코틀린 기초 (feat. 함수, 클래스, Null 등...) (0) 2024.01.14 [Android] 안드로이드... 개념적인 것도 공부해보자! (0) 2023.12.10 [Android/Kotlin] 앨범, 주사위, 명언 앱 만들어보기 (Feat. GitHub) (0) 2023.11.10