안드로이드 개발자의 창고
[50일차 Android] Basic Resource 본문
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT
📖 BasicResource
- 리소스 파일 : 애플리케이션에서 사용하는 다양한 미디어 파일, 데이터 파일 등등
- 안드로이드는 리소스 파일들을 res 폴더를 통해 관리한다.
- 안드로이드는 이미지와 xml 파일을 리소스로 관리하고, xml 파일을 안드로이드에서 정의한 데이터들을 관리하는 용도로 사용한다.
- xml 파일로 관리되는 데이터들은 언어, 크기 등에 따라 단말기에 대응할 수 있도록 처리할 수도 있다.
문자열 관리
- 문자열, 문자열 배열을 xml에 등록해서 사용할 수 있다.
- 다국어 지원을 위해 사용한다.
색상 관리
- 안드로이드는 단말기 제조사가 자신의 단말기에 안드로이드 OS를 넣게 된다.
- 이 때, 단말기마다 지원하는 색상, 처리 방식 등이 달라 원하는 색상이 나오지 않을 수도 있는데 이 처리를 안드로이드 OS가 해줄 수 있게 된다.
크기 관리
- 모든 디스플레이 장비는 px 이라는 단위로 크기 등을 결정하게 된다.
- 안드로이드는 다양한 단말기 때문에 px을 사용하면 크기가 다르게 나타날 수 있다.
- 안드로이드는 가변형 단위들을 제공한다.
-
px : 실제 사용할 픽셀의 개수
-
dp : 160ppi 액정에서 1dp = 1px
-
sp : 단말기에 설정되어 있는 글자 크기에 따라 가변, 기본 크기에서 160ppi 액정에서 1sp = 1px
-
mm : 밀리미터
-
in : 인치
-
pt : 1pt = 1/72인치
-
예제 코드
res / values / strings.xml
<resources>
<string name="app_name">Android78_BasicResource</string>
<string name="str1">안녕하세요</string>
<string name="str2">반갑습니다</string>
<!-- 문자열 : %s, 정수 : %d, 실수 : %f, 그 외 : %s -->
<string name="str3">이름은 %s이고, 나이는 %d살 입니다</string>
<!-- 문자열 배열 -->
<string-array name="str4_array">
<item>항목1</item>
<item>항목2</item>
<item>항목3</item>
<item>항목4</item>
<item>항목5</item>
</string-array>
</resources>
res / values / dmen.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="px">1px</dimen>
<dimen name="dp">1dp</dimen>
<dimen name="sp">1sp</dimen>
<dimen name="inch">1in</dimen>
<dimen name="mm">1mm</dimen>
<dimen name="pt">1pt</dimen>
</resources>
res / values / colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<!-- RGB -->
<color name="color1">#F00</color>
<!-- ARGB-->
<color name="color2">#5F00</color>
<!-- RRGGBB -->
<color name="color3">#00FF00</color>
<!-- AARRGGBB -->
<color name="color4">#800F55BF</color>
</resources>
MainActivity.kt
class MainActivity : AppCompatActivity() {
lateinit var activityMainBinding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(activityMainBinding.root)
activityMainBinding.run {
button.setOnClickListener {
// textView의 문자열을 직접 설정한다.
// textView.text = "새로운 문자열"
// res/values 폴더에 있는 문자열을 가지고 온다.
// res 폴더 -> R
// val str1 = resources.getString(R.string.str2)
// textView.text = str1
// 문자열에 한해서만 getString을 사용하여 설정 가능
// val str1 = getString(R.string.str2)
// textView.text = str1
textView.setText(R.string.str2)
}
button2.setOnClickListener {
// 문자열을 가져온다.
val str1 = getString(R.string.str3)
// % 부분에 값을 설정하여 문자열을 완성한다.
val str2 = String.format(str1, "홍길동", 30)
textView.text = str2
}
button3.setOnClickListener {
// 문자열 배열을 가져온다.
val str4Array = resources.getStringArray(R.array.str4_array)
textView.text = ""
for(str1 in str4Array) {
textView.append("${str1}\n")
}
}
button4.setOnClickListener {
// 사전 정의되어 있는 색상 값 사용
// textView.setTextColor(Color.RED)
// RGB 지정(R-Red, G-Green, B-Blue, 빛의 삼원색)
// val c1 = Color.rgb(227, 30, 89)
// textView.setTextColor(c1)
// ARGB 지정(A - alpha, R - Red, G - Green, B - Blue, 투명색과 빛의 삼원색)
// val c2 = Color.argb(50, 227, 30, 89)
// textView.setTextColor(c2)
// context가 제공하는 메서드를 통해 색상 값을 가져온다.
val c3 = getColor(R.color.color1)
textView.setTextColor(c3)
}
button5.setOnClickListener{
// 크기 값들을 가져온다.
val px = resources.getDimension(R.dimen.px)
val dp = resources.getDimension(R.dimen.dp)
val sp = resources.getDimension(R.dimen.sp)
val inch = resources.getDimension(R.dimen.inch)
val mm = resources.getDimension(R.dimen.mm)
val pt = resources.getDimension(R.dimen.pt)
textView.text = "1px = ${px}px\n"
textView.append("1dp = ${dp}px\n")
textView.append("1sp = ${sp}px\n")
textView.append("1inch = ${inch}px\n")
textView.append("1mm = ${mm}px\n")
textView.append("1pt = ${pt}px\n")
textView.textSize = 15 * sp
}
}
}
}
결과
'Computer > Android' 카테고리의 다른 글
[51일차 Android] 9Patch Image (0) | 2023.07.18 |
---|---|
[50일차 Android] Image Resource / Image Animation (0) | 2023.07.18 |
[50일차 Android] Preferences Screen (0) | 2023.07.17 |
[50일차 Android] Preferences (0) | 2023.07.17 |
[50일차 Android] Content Provider (0) | 2023.07.14 |