Android - Resource

이동수·2024년 9월 13일

Android

목록 보기
2/75

코드이외 모든건 자원파일

자원파일 디렉토리는 다 예약어임

예약어 : 정해져있는거, 내가 주고싶은이름 못줌

단말기 좌표는 왼쪽위가 원점 (화면 돌려도 같음)

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"> //다른 외부 앱에서도 실행할 수 있는지 여부(11부터 의무)
	<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{ , , ,}

요즘방식 (현재화면을 바인딩하는 역할)

//App Level : build.gradle.kts
android {
	buildFeatures{
		viewBinding = true //현재 화면과 바인딩 클래스를 생성
	}
}
//Activity 코드
binding = ActivityMainBinding.inflate(layoutInflater).also{
	setContentView(it.root)
}
binding.currentBtn.setOnClickListener {
	.....
}
  • 요즘 data binding은 안쓴다

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만 쓰자
    • 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

  • xml로 만들어진 앱의 화면들
  • 메뉴를 구성하는 xml파일들

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 인가?

0개의 댓글