Archives
Recent Posts
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[50일차 Android] Basic Resource 본문

Computer/Android

[50일차 Android] Basic Resource

Wise-99 2023. 7. 17. 21:48

 

 

 

출처 : 안드로이드 앱스쿨 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
            }
        }
    }
}

 

 

 

결과