반응형

Resources

설명

  • 문자열, 색상, 사이즈 등을 관리하는 방법을 설명한다.
  • 사이즈는 px 단위로 사용시 단말기마다 다른 사이즈로 보여지는 현상이 발생한다.
  • 사용 가능 단위
    • px : 실제 픽셀
    • dp : 단말기 사이즈에 비례해서 픽셀 결정
    • sp : dp와 동일, 글자 크기 설정시 사용
    • mm : 밀리미터
    • in : 인치
    • pt : 1pt = 1/72인치

코드

res/values/colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="purple_200">#FFBB86FC</color>
    <color name="purple_500">#FF6200EE</color>
    <color name="purple_700">#FF3700B3</color>
    <color name="teal_200">#FF03DAC5</color>
    <color name="teal_700">#FF018786</color>
    <color name="black">#FF000000</color>
    <color name="white">#FFFFFFFF</color>
</resources>
res/values/dimen.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="basic_text_size">15sp</dimen>
    <dimen name="title_text_size">30sp</dimen>
    <dimen name="basic_height">40dp</dimen>
</resources>
res/values/strings.xml
<resources>
    <string name="app_name">android-example</string>
    <string name="msg1">Hello World</string>
    <string name="msg2">Bye World</string>
    <string-array name="data_array">
        <item>항목1</item>
        <item>항목2</item>
        <item>항목3</item>
        <item>항목4</item>
    </string-array>
</resources>
res/layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="@dimen/basic_height"
        android:text="@string/msg1"
        android:textColor="@color/purple_500"
        android:textSize="@dimen/basic_text_size" />

    <Button
        android:id="@+id/changeStringButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="change string" />

    <Button
        android:id="@+id/changeColorButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="change color" />

    <Button
        android:id="@+id/changeSizeButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="change size" />
</LinearLayout>
MainActivity
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val textView = findViewById<TextView>(R.id.textView)
        val changeStringButton = findViewById<Button>(R.id.changeStringButton)
        val changeColorButton = findViewById<Button>(R.id.changeColorButton)
        val changeSizeButton = findViewById<Button>(R.id.changeSizeButton)

        changeStringButton.setOnClickListener {
            /*val msg2 = resources.getString(R.string.msg2)
            textView.text = msg2*/

            /*val dataList = resources.getStringArray(R.array.data_array)
            textView.text = ""
            for (data : String in dataList) {
                textView.append("$data\n")
            }*/

            textView.setText(R.string.msg2)
        }

        changeColorButton.setOnClickListener {
            /*textView.setTextColor(Color.RED)*/
            /*textView.setTextColor(Color.rgb(50, 50, 50))*/
            /*textView.setTextColor(Color.argb(20, 50, 50, 50))*/
            textView.setTextColor(ContextCompat.getColor(this, R.color.teal_700))
        }

        changeSizeButton.setOnClickListener {
            val titleTextSize = resources.getDimension(R.dimen.title_text_size)
            val basicTextSize = resources.getDimension(R.dimen.basic_text_size)
            val basicHeight = resources.getDimension(R.dimen.basic_height)

            textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, titleTextSize)
        }
    }
}

참고

이미지 관리

설명

  • drawable 폴더에 이미지를 넣어서 사용.
  • 이미지 파일명은 반드시 소문자로 구성해야 한다.
  • xml을 통해 이미지를 다양한 방식으로 노출되도록 할 수 있다.
    • selector : 버튼 클릭/기본 상태에 대한 이미지 설정
    • layer-list : 이미지를 여러개 설정
    • bitmap : 단일 이미지 설정

코드

  • icon_facebook.png, icon_instagram.png를 res/drawable 디렉토리에 복사 후 아래 예제를 시작
res/drawable/bitmap.xml
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/icon_instagram"
    android:tileMode="repeat" />
res/drawable/layer_list.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/icon_instagram" />
    </item>
    <item
        android:left="50dp"
        android:top="50dp">
        <bitmap
            android:gravity="center"
            android:src="@drawable/icon_facebook" />
    </item>
</layer-list>
res/drawable/selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/icon_facebook" android:state_pressed="true" />
    <item android:drawable="@drawable/icon_instagram" /> <!-- 기본 상태 항목을 반드시 가장 마지막에 배치 -->
</selector>
res/layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bitmap"
    android:orientation="vertical">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/layer_list" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/selector" />

</LinearLayout>

참고

Localization

설명

  • 다양한 언어 및 국가별로 지원하기 위한 개념
  • 리소스 폴더를 국가 코드에 따라 다르게 지정하여 사용할 수 있다.

코드

이미지 추가
  • res/drawable/icon.png
  • res/drawable-ko/icon.png
res/values/strings.xml
<resources>
    <string name="app_name">android-example</string>
    <string name="msg1">Hello World</string>
</resources>
res/values-ko/strings.xml
<resources>
    <string name="app_name">android-example</string>
    <string name="msg1">안녕하십니까</string>
</resources>
res/values-ko-rKR/strings.xml
<resources>
    <string name="app_name">android-example</string>
    <string name="msg1">안녕하세요</string>
</resources>
res/layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/icon" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/msg1" />

</LinearLayout>

참고

해상도 대응하기

설명

  • 해상도에 따른 분류
    • ldpi : ~ 120dpi
    • mdpi : ~ 160dpi
    • hdpi : ~ 240dpi
    • xhdpi : ~ 320dpi
    • xxhdpi : ~ 480dpi
    • xxxhdpi : ~ 640dpi

코드

이미지 추가
  • res/drawable-hdpi/icon.png
  • res/drawable-xhdpi/icon.png
res/layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/icon" />

</LinearLayout>

참고

반응형

'Development > Android' 카테고리의 다른 글

[Android] SoundPool  (0) 2021.02.09
[Android] MediaPlayer  (0) 2021.02.09
[Android] SQLite  (0) 2021.02.09
[Android] Service  (0) 2021.02.09
[Android] BroadcastReceiver  (0) 2021.02.09

+ Recent posts