코드이외 모든건 자원파일
자원파일 디렉토리는 다 예약어임
예약어 : 정해져있는거, 내가 주고싶은이름 못줌
단말기 좌표는 왼쪽위가 원점 (화면 돌려도 같음)
Activity의 기본 역할
사용자와의 인터액션을 담당
- 사용자와 앱이 커뮤니케이션하는 핵심 컴포넌트
- 고유의 Life Cycle을 갖는다
- layout(XML) 파일 및 Activity or Fragment 안에서 직접 코드(UI/UX Coding or Jetpack Compose)로 구성
- Activity 하나는 Window 객체 하나(Dialog 포함) 를 갖는다 - 작은 activity
- 안드로이드 프로젝트 중 다음을 갖는 Activity 는 하나만 존재
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
XML Layout을 객체화 하는 과정(inflation)
- XML로 정의된 UI 레이아웃을 실제 View 객체로 변환하는 것
옛날방식
setContentView(R.layout.activity_main)
val currentBtn = findViewById<Button>(R.id.current_btn)
currentBtn.setOnClickListener{ , , ,}
요즘방식 (현재화면을 바인딩하는 역할)
android {
buildFeatures{
viewBinding = true
}
}
binding = ActivityMainBinding.inflate(layoutInflater).also{
setContentView(it.root)
}
binding.currentBtn.setOnClickListener {
.....
}
AppCompatActivity 와 Binding
MainActivity : AppCompatActivity()
- 기본 Activity에 Theme , Menu, 주 화면 등을 배치할 수 있는 확장된 Activity
ViewBinding
- 뷰 결합 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성
- 모듈에서 사용 설정된 뷰 결합은 모듈에 있는 각 XML 레이아웃 파일의 결합 클래스를 생성
- 바인딩 클래스의 인스턴스에는 상응하는 레이아웃에 ID가 있는 모든 뷰의 직접 참조가 포함
- 뷰바인딩 클래스의 이름은 XML 파일의 이름을 카멜 표기법으로 변환하고 끝에 'Binding'을 추가하여 생성
기존 findViewById 와의 차이점
- Null 안전: 뷰 결합은 뷰의 직접 참조를 생성하므로 유효하지 않은 뷰 ID로 인해 null 포인터예외가 발생할 위험이 없다
- Type 안전: 각 바인딩 클래스에 있는 필드의 유형이 XML 파일에서 참조하는 뷰와 일치하며 클래스 변환 예외가 발생할 위험이 없다
Resource
앱 개발은 자원과 프로그램 운영을 분리하여 개발
애플리케이션에서 코드를 제외한 모든 것은 자원 파일에 해당
Goods S/W의 기본은 Source Code에 자원을 hard-coding 하지 않음.
자원과 실제 코드를 분리 함으로써 유지보수, 향 후 확장성 및 개발의 편이성을 제공.
자원 선언(xml)을 하여 개발하는 방법이 대세
Android Resources 종류
- Programming Logic을 제외한 모든 것.
- 문자열(배열포함),이미지, 아이콘, 오디오, 텍스트, 동영상 , 폰트스타일, 범용 XML파일,Animation 처리, 권한 선언(네트웍) 등등
aapt [Android Asset Packaging Tool]
- 안드로이드에서 자원을 관리하는 패키징 도구
- res 폴더의 자원(자산)들을 컴파일 하는 도구
- 자원 변수 참조 정의를 담고 있는 com.sesac.name.R 클래스를 자동 생성
- aapt가하는일 (오른쪽처럼 저장시킴)
- res
- aapt에 의해 참조 변수를 생성.
- 단순 자원 및 복합 자원으로 분리 됨.
- 각 자 고유의 고정된 디렉토리가 존재 함.
- assets(assetManager)
- 미가공된 원시 임의 파일
- /assets/./. (디렉토리를 만들 수 있음)
- 에셋의 자원은 R.java 파일에 ID가 만들어 지지 않음
- 참조변수가 생성되지 않고 원본 그래도 배포 됨.
- 보통 용량이 큰 데이터를 의미(HTML, 동영상 등).
- aapt 의 영향을 받지 않음
- dp랑 sp만 쓰자
res
- 자원은 res폴더에서 관리
- 파일, 폴더들은 전부 소문자, 숫자, _ 만 가능
- 원본(raw) 자료 파일은 raw 또는 assets 폴더에 저장
- packageName.R.java 라는 자원 관리 클래스를 사용
- Root Tag를 기반
- : strings.xml
- : colors.xml
- : drawables.xml - 만들지마
- : arrays.xml
-
- : dimens.xml
- : fractions.xml - percent저장하는거 0.06같이
- 파일이름이 고정된 것은 아니나 안드로이드에서는 위의 파일이름을 권장
- Resources 객체는 현재 자원에 선언된 자원의 실제 값을 참조할 수 있는 다양한 함수가 존재
- val titleString = resources.getString(R.string.title_string)
- 안드로이드 자원 서로 참조하기[ 외부파일 참조]
- @[추가팩키지이름:]자원형식/변수_이름 → @string/userName
drawable
- 만들어서 쓰지마. 그냥 디자이너가 주는거 써
- 9 patch (*.9.png)
- 다양한 화면 크기에 맞게 자동으로 축소/확대가 가능 하여 디자인 작업을 별도로 하지않아도 되는 장점이 존재
- 이곳저곳 잘라서 늘어나는거 (카톡방 물풍선같은거, 자른부분이 늘어남)
- 자르는건 우리가 그림파일에서 creat 9-patch파일 들어가서 잘라야함
- 이미지
- xml만들 도형들
- png, webp만 쓰자 (jpeg, gif같은거 쓰지마)
- png to webp
- 기본 이미지 포맷보다 적은 용량으로 인터넷 자원을 적게 사용하고 퍼포먼스 향상을 위해 구글에서 개발
- png오른쪽 눌러서 convert to webp 눌러서 바꿔서 써버려
- 다 xxxhdpi
- hdpi 1dp = 1px
- x : 1dp = 2px
- xx : 1dp = 3px
- xxx : 1dp = 4px
font
layout
anim, animator
- xml로 구성된 애니메이션
- apng쓰자
- [ , ,, ]
mipmap
raw
- app에서 사용할 원시파일
- json, ogg, avi등
values
- 전부 xml
- android size [Dimension], 마진, 텍스트크기, 여백 등
- 앱에서 사용하는 문자열(text), 배열
- 앱에서 사용할 컬러 값
- 앱에 적용할 theme & style, 화면 전체 및 각 위젯들
- styles - 특정 View나 위젯에만 적용되는 로컬 스타일
- themes - 애플리케이션 또는 Activity 전체에 적용되는 전역적인 스타일
xml
- 자원파일 외 xml파일
- setting화면 전용 xml파일 등
<
xmlns:android="http://schemas.android.com/apk/res/android"
XML 파일에서 android 속성을 사용하기 위해 반드시 포함해야함
xmlns:app="http://schemas.android.com/apk/res-auto"
app:로 시작하는 속성을 사용하고 싶을 때는 반드시 선언
커스텀 속성을 정의하기 위해 사용
xmlns:tools="http://schemas.android.com/tools"
tools:로 시작하는 속성을 사용하고 싶을 때는 반드시 선언
디자인 타임에만 필요한 속성들을 정의하기 위해 사용
국제화/현지화/화면 상태 다루기
- Android에서는 다양한 언어와 지역을 설정 할 수 있음
- 단말기의 화면 크기를 다양한 안드로이드 폰에 적용 가능.
- 안드로이드는 Locale Setting을 변경하면 응용 프로그램들은 해당 Locale을 적용
- 안드로이드는 /res/ 하위 디렉토리의 Locale과 단말기 기기 구성을 참조.
- 미리 정의 된 한정사를 사용 함.
- 두개 이상의 한정사를 사용 할 땐 dash( ‘–’) 를 이용
- 한정사는 영문 소문자와 숫자로만 이루어 짐.
- 현재 안드로이드 시스템에 설정된 로케일은 디폴트 로케일이 됨
- ko_KR 이라면 /res/values/ 이렇게 사용 하면 됨
- en_US 라면 /res/values-en 이렇게 사용
- /res/values-ko-KR 인가?