외로운 Nova의 작업실

안드로이드 앱 프로그래밍 - 8(리소스의 종류와 특징) 본문

Programming/Kotlin - Android

안드로이드 앱 프로그래밍 - 8(리소스의 종류와 특징)

Nova_ 2023. 1. 13. 16:49

- 리소스

앱에서 사용하는 리소스는 크게 앱 리소스와 플랫폼 리소스로 구분됩니다. 

 

- 앱리소스

앱을 개발하기위해 모듈을 만들면 자동으로 res라는 디렉터리가 생기고 그아래에 drawable, layout, mimmap, values라는 3개의 디렉터리가 생성됩니다. 이는 기본적으로 만들어지지만 사실 리소스파일의 종류는 더 많습니다. 다양한 리소스 디렉터리를 res 아래에 만들어 쓸 수 있지만 이름들은 임의로 정할 수 없고 고정되어 있습니다. 아래는 그에따른 자료입니다.

디렉터리명 리소스종류
animator 속성 애니메이션 XML
anim 트윈 애니메이션 XML
color 색상 상태 목록 정의 XML
drawable 이미지 리소스
mipmap 앱 실행 아이콘 리소스
layout 레이아웃 XML
menu 메뉴 구성 XML
raw 원시 형태로 이용되는 리소스 파일
values 단순 값으로 이용되는 리소스
xml  특정 디렉터리가 정의되지 않은 나머지 XML 파일
font 글꼴 리소스

 

<리소스 사용하기>

values 디렉터리만 빼면 리소스는 파일의 이름으로 사용합니다. 방법은 아래와 같습니다.

drawable>round_botton.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    android:padding = "10dp">
    <solid android:color="#6666FF"></solid>
    <corners
        android:bottomLeftRadius="30dp"
        android:bottomRightRadius="30dp"
        android:topLeftRadius="30dp"
        android:topRightRadius="30dp"></corners>
</shape>

activity_main.xml

  <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/startButton"
                android:background="@drawable/round_botton"
                android:text="start"
                android:textStyle="bold"/>

위처럼 보통은 리소스에 접근할때 파일의 이름으로 접근하지만 values 리소스의 경우 name으로 접근합니다.

 

<valuse 리소스 사용법>

res>valuse>strings.xml

<resources>
    <string name="app_name">stopwatch</string>
    <string name="txt_data1">hello</string>
    <string name="txt_data2">world</string>
</resources>

activity_main.xml

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

- 플랫폼 리소스 사용하기

Package를 눌러 Libraries를 보면 플랫폼 리소스가 있습니다.

 

 

- 리소스 조건 설정

리소스 조건 설정이란 어떤 리소스를 특정환경에서만 적용되도록 설정하는 것을 말합니다. 이것은 파일의 이름으로 설정할 수 있습니다. 보통 mipmap의 경우 기기별 실행 아이콘 크기가 다르기때문에 각각 크기에 맞는 이미지를 설정해줘야합니다. 다만, mipmap은 기본적으로 조건 설정 폴더가 잘만들어져있습니다.

아래는 기기별 실행 아이콘 크기입니다.

화면 밀도 크기
XXXHDPI 192x192
XXHDPI 144x144
XHDPI 96x96
HDPI 48x48
MDPI 36x36

각각 화면밀도에 맞는 폴더에 크기를 맞춘 이미지를 넣어놓으면 안드로이드 스튜디오가 알아서 해줍니다. 이때 이미지의 이름은 모두 같아야합니다.

 

<화면 회전에 대응하기>

먼저 layout-land 폴더를 만들어줍니다.

세로와 가로의 xml 파일을 만들어줍니다.

//세로
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:src="@drawable/image1"/>
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:src="@drawable/image2"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/txt_data1"/>
    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>
//가로
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">
        <ImageView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:src="@drawable/image1"/>
        <ImageView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:src="@drawable/image2"/>
    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

각각 이름을 같게하여 폴더에 넣어줍니다.

이제 실행시켜봅니다.

Comments