Concepts of Resource
1. Resource
- res 하위에 리소스 파일 위치, 이미지 등을 제외하고 대부분 xml 파일 형식으로 리소스를 담는다
- 리소스를 담으면 리소스를 식별하기 위한 식별자 변수가 R파일에 자동으로 생성되고, 리소스 사용시에는 R 파일에서 참조해서 사용
- kt에서 : R.drawable.a, R.layout.b, ...
- xml에서 : @drawable/a, @layout/b, ...
- 리소스에 해당하는 식별자 변수가 R파일에 자동으로 추가되어서
- res 하위에 폴더명은 정의된 폴더명을 따라야 함
- res 하위 폴더들에는 하위 폴더를 생성할 수 없음
- 리소스 파일은 자바 명명규칙을 지켜야 함(숫자 우선X)
- 리소스 파일은 처음이든 중간이든 알파벳 대문자를 포함할 수 없음
2. Resource 종류
- anim : 정적 애니메이션 리소스, Tween animation XML
- drawable : 이미지 리소스
- mipmap : 앱 런처 아이콘 이미지 리소스
- layout : 레이아웃 XML
- menu : 메뉴 구성 XML
- raw : 원시 형태로 이용되는 리소스 파일
- value : 단순 값으로 이용되는 리소스
- xml : 특정 폴더가 정의되지 않은 나머지 XML 파일
3. Platform Resource
- 안드로이드 플랫폼에서 제공하여 개발자가 따로 준비하지 않아도 되는 리소스
- kt에서 : android.R.drawable.a, ...
- xml에서 : @android:drawable/a, ...
Drawable Resource
1. drawable
- 이미지 리소스를 지정하기 위한 폴더
- png, jpg, gif
- 이용 방법
- kt에서 : R.drawable.image, ...
- xml에서 : @drawable/image, ...
- xml 이미지 : xml로 표현되는 이미지
- 종류
- shape : 도형을 의미, 값은 rectangle, oval, line, ring 중 하나
- corners : 둥근 모서리를 만들기 위해 사용, shape 값이 rectangle인 경우에만 적용
- gradient : 그라데이션 색상을 지정하기 위해 사용
- size : 도형의 크기
- solid : 도형의 색상
- stroke : 도형에 대한 스트로크 선
Values Resource
1. values
- 값으로 이용되는 리소스를 저장하기 위한 폴더
- 문자열, 색상, 사이즈, 스타일, 배열
- 리소스 파일명으로 식별되지 않고 리소스 태그와 태그의 name 값으로 식별
<resources>
<string name="app_name">app</string>
<string name="txt_data1">Hello</string>
<string name="txt_data2">World</string>
</resources>
textView.text = getString(R.string.txt_data2)
- 종류
- string : 문자열 리소스
- color : 색상 리소스
- dimen : 사이즈 리소스
- style : 뷰에 등록되는 여러 속성을 스타일로 등록, (patent : 다른 속성을 override)
<resources>
<style name="MyTextStyle">
<item name="android:textSize">@dimen/txt_size</item>
<item name="android:textColor">@color/txt_color</item>
</style>
<style name="MyTextSub" parent="MyTextStyle">
<item name="android:textColor">#0000FF</item>
<item name="android:background">@color/txt_bg_color</item>
</style>
</resources>
Resource Folder Constraint
1. 리소스 조건 명시
- 리소스가 적용될 조건을 폴더명에 명시
- mipmap에서 아이콘을 준비했을 때 기기의 dpi에 따라 화면에 나오는 사이즈가 다르다 → 해상도 문제가 발생할 수 있음 → 각 디바이스에 따른 아이콘 이미지를 따로 준비해야 함 → 이미지를 여러 장 준비한다면 어떤 것을 디바이스에 적용할지를 동적으로 결정해야 함 → 그럼 코드에서 if, else-if, else 문을 써야하나? → 리소스 조건 명시법을 사용하면 조건문 없이 이것을 해결할 수 있다
- 리소스 조건 명시법 사용 방법 : 이미지는 사이즈 별로 준비한 뒤, 폴더명에 조건을 주면 된다(ex : mipmap-mdpi/ic_launcher.png로 설정시 mdpi 폰에만 적용)
- kt나 xml 파일에서는 폴더명 조건 없이 R.mipmap.ic_launcer 또는 @mipmap/ic_launcher로 작성하여 사용하면 된다
2. 리소스 조건 명시 종류
- 각각이 특정 폴더에 들어가야하는 것이 아니라 어느 폴더에나 들어갈 수 있음(ex : 언어 및 지역은 values에만 들어가는 것이 아닌 drawable 등 다른 폴더에도 들어갈 수 있음)
- 여러 개의 조건을 줄 때는 아래의 순서에 따라 조건을 명시해야 함
- 이동통신 국가 코드 : mcc310, mcc310-mnc004
- 언어 및 지역 : en, ko-rKR
- 레이아웃 방향 : ldrtl, ldltr
- 이용 가능한 너비 : w720dp
- 이용 가능한 높이 : h720dp
- 화면 크기 : small, normal, large, xlarge
- 화면 비율 : long, notlong
- 원형 화면 : round, notround
- 화면 방향 : port, land
- UI 모드 : car, desk, television, application, watch, vrheadset
- 야간 모드 : night, notnight
- 화면 픽셀밀도 : ldpi, mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi, nodpi, tvdpi, anydpi, nnndpi
- 터치스크린유형 : notouch, finger
- 키보드가용성 : keysexposed, keyshidden, keyssoft
- 기본 텍스트 입력방법 : nokeys, qwerty, 12key
- 탐색키가용성 : navexposed, navhidden
- 기본 비터치 탐색방법 : nanav, dpad, trackball, wheel
- 플랫폼 버전 : v21