2022. 12. 8. 01:34ㆍ_Study/AndroidStudio
12-1 제트팩과 androidx 소개 🐇¸.•*¨*•¸.•*¨*•¸.•*¨*•¸.•*¨*•
해당 자료는 강의 학습자료이며, Do it! 깡샘의 안드로이드 앱 프로그래밍 with 코틀린을 참고하였습니다.
플랫폼 API는 ART에서 제공하는 안드로이드 라이브러리이다.
제트팩은 구글에서 안드로이드 앱 개발용으로 제공하는 다양한 라이브러리 모음으로 androidx로 시작하는 패키지명을 사용한다. 제트팩은 앱을 개발하는 데 필요한 권장 아키텍처를 제공하고 API 호환성 문제를 해결하며 플랫폼 API에서 제공하지 않는 다양한 기능을 제공한다.
androidx 라이브러리 : 화면 구성과 관련된 라이브러리
androidx.appcompat: 앱의 API 레벨 호환성을 해결
androidx.recyclerview: 목록 화면을 구성
androidx.viewpager2: 스와이프로 넘기는 화면을 구성
androidx.fragment: 액티비티처럼 동작하는 뷰를 제공
androidx.drawerlayout: 옆에서 서랍처럼 열리는 화면을 구성
12-2 appcompat 라이브러리 🐇¸.•*¨*•¸.•*¨*•¸.•*¨*•¸.•*¨*•
appcompat 라이브러리는 안드로이드 앱의 화면을 구성하는 액티비티를 만들며 API 레벨의 호환성 문제를 해결
implementation 'androidx.appcompat:appcompat:1.5.1'
액션바
화면 위쪽에 타이틀 문자열이 출력되는 영역
내비게이션 아이콘, 액션 아이템, 오버플로 메뉴 등 다양한 요소를 액션바에 출력할 수 있다.
res/values 안에 있는 themes.xml 에 선언한다.
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.MyApplication" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_500</item> //액션바, 버튼의 배경색
<item name="colorPrimaryVariant">@color/purple_700</item> //그림자 색상
<item name="colorOnPrimary">@color/white</item> //colorPrimary가 적용되는 곳의 전경색
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item> //활성 상태(텍스트 뷰의 링크, 체크박스나 라디오 버튼이 체
크되었을 때, 스위치 켬 상태, 플로팅 액션 버튼의 배경색)
<item name="colorSecondaryVariant">@color/teal_700</item> //그림자 색상
<item name="colorOnSecondary">@color/black</item> //colorSecondary가 적용되는 곳의 전경색
<!-- Status bar color. -->
<item name="android:statusBarColor">?attr/colorPrimaryVariant</item> //상태바의 배경색
<!-- Customize your theme here. -->
</style>
</resources>
액션바 숨기기 설정
<style name="Theme.MyApplication" parent="Theme.MaterialComponents.DayNight.NoActionBar">
업 버튼 설정
: 액션바 왼쪽에 이전 화면으로 되돌아가는 화살표 모양의<- 업버튼을 제공할 수 있다.
supportActionBar?.setTitle(“Title”)
binding.btn.setOnClickListener {
val intent = Intent(this, TwoActivity::class.java)
startActivity(intent)
}
매니페스트 파일에 parentActivityName 속성 선언없이 코드에서 업 버튼을 생성할 수 있다.
supportActionBar?.setDisplayHomeAsUpEnabled(true)
메뉴 구성
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
val menuItem1: MenuItem? = menu?.add(0,0,0,"menu1")
val menuItem2: MenuItem? = menu?.add(0,1,0,"menu2")
return super.onCreateOptionsMenu(menu)
}
메뉴는 액션바의 중요한 구성 요소로 액티비티 화면에서 사용자 이벤트를 사용할 수 있도록 합니다.
액티비티에 메뉴를 추가하고 싶다면 onCreateOptionsMenu()와 onPrepareOptionsMenu() 함수를 이용
onCreateOptionsMenu() 함수는 액티비티가 실행되면서 처음에 한 번만 호출
onPrepareOptionsMenu() 함수는 액티비티가 실행되면서 한 번 호출된 후 오버플로 메뉴가 나타날 때마다 반복해서 호출
메뉴를 사용자가 선택했을 때 이벤트 처리는 onOptionItemSelected()함수를 이용한다.
함수의 매개변수는 이벤트가 발생한 메뉴 객체인 MenuItem
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
val menuItem1: MenuItem? = menu?.add(0,0,0,"menu1")
val menuItem2: MenuItem? = menu?.add(0,1,0,"menu2")
return super.onCreateOptionsMenu(menu)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean = when(item.itemId) {
0->{
binding.textView.text = "0을 선택하셨어요"
true
}
1->{
binding.textView.text = "1을 선택하셨어요"
true
}
else -> super.onOptionsItemSelected(item)
}
리소스로 메뉴 구현
메뉴를 구성하는 XML 파일은 res 폴더 아래 menu 디렉토리를 만든다.
menuInflater.inflate(R.menu.menu_main,menu)
액션바에 아이콘으로 나타나게 하려면 showAsAction 속성을 이용
- never(기본): 항상 오버플로 메뉴로 출력한다.
- ifRoom: 만약 액션바에 공간이 있다면 액션 아이템으로, 없다면 오버플로 메뉴로 출력한다.
- always: 항상 액션 아이템으로 출력한다.
menu_main.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu1"
android:title="menu1"/>
<item
android:id="@+id/menu2"
android:icon="@android:drawable/ic_menu_add"
android:title="menu2"
app:showAsAction="always"/>
<item
android:id="@+id/menu3"
android:icon="@android:drawable/ic_menu_search"
android:title="menu3"
app:showAsAction="ifRoom"/>
</menu>
액션 뷰는 액션바에서 특별한 기능을 제공하며 대표적으로 androidx.appcompat.widget.SearchView가 있다. (돋보기) 누르면 검색으로 넘어간다. SearchView를 등록한 MenuItem 객체를 얻고 MenuItem 객체에 등록된 SearchView 객체를 구하면 된다.
override fun onCreateOptionsMenu(menu: Menu): Boolean {
val inflater = menuInflater
menuInflater.inflate(R.menu.menu_main,menu)
val menuItem = menu?.findItem(R.id.menu3)
val searchView = menuItem?.actionView as SearchView
searchView.setOnQueryTextListener(object:SearchView.OnQueryTextListener{
override fun onQueryTextChange(newText: String?): Boolean {
return true
//검색어 변경 이벤트
binding.textView.text = newText
}
override fun onQueryTextSubmit(query: String?): Boolean {
return true
// 키보드의 검색 버튼을 클릭한 순간의 이벤트
binding.textView.text = "검색하실건가요?"
}
})
return true
//return super.onCreateOptionsMenu(menu)
}
어라.. 내 생각대로 안 돌아간다.
툴바
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Widget.MaterialComponents.Toolbar.Primary"/>
setSupportActionBar(binding.toolbar)
액션바는 액티비티 창이 자동으로 출력하는 액티비티의 구성 요소지만, 툴바는 개발자가 직접 제어하는 뷰라는 데
차이점이 있다.
액티비티 테마 설정 파일(themes.xml)에서 액션바 숨기기 설정 후
레이아웃 XML 파일에 다음처럼 Toolbar를 등록
호환성을 고려한 기본 뷰 클래스
플랫폼 API에서 제공하는 기본 뷰를 appcompat 라이브러리에서도 제공
- TextView 클래스를 appcompat 라이브러리에서는 AppCompatTextView라는 클래스명으로 제공
- AppCompatImageView, AppCompatEditText, AppCompatButton, AppCompatCheckBox, AppCompatRadioButton 등 기
본 뷰에 해당하는 뷰를 제공
'_Study > AndroidStudio' 카테고리의 다른 글
[카카오맵 API] 안드로이드 코틀린 카카오맵 불러오기 초기세팅 (22.01.01 전기뱀장어 버젼) (3) | 2023.05.24 |
---|---|
프래그먼트 – 액티비티처럼 동작하는 뷰 (0) | 2022.12.08 |
seekbar을 이용한 음악재생 #시크바 코틀린 (0) | 2022.12.07 |
소리와 진동 알림, 알림 띄우기 안드로이드 스튜디오 (1) | 2022.12.07 |
다양한 다이얼로그 코틀린 안드로이드 스튜디오 #토스트 #알림 #캘린더 #시계 (0) | 2022.12.07 |