안드로이드 리소스 활용하기, 리소스 종류와 특징, 리소스 조건 설정

2022. 12. 7. 01:20_Study/AndroidStudio

728x90

리소스의 종류와 특징  🐇¸.•*¨*•¸.•*¨*•¸.•*¨*•¸.•*¨*•

해당 자료는 강의 학습자료이며, Do it! 깡샘의 안드로이드 앱 프로그래밍 with 코틀린을 참고하였습니다.


리소스는 크게 앱 리소스플랫폼 리소스로 구분된다.

 

 

앱 리소스 사용하기

개발자가 추가한 리소스으로 이름 규칙이 있다.

 

- 리소스 디렉토리 명은 고정

- 리소스 파일명은 values 에 추가하는 파일을 제외하고는 모두 자바의 이름 작성 규칙을 준수

- 알파벳 대문자를 사용할 수 없음

- 리소스 디렉토리명과 리소스 파일명을 R 파일에 식별자로 등록

 

 

레이아웃 리소스 - layout 디렉토리

이미지 리소스 - drawable 디렉토리

 

XML 이미지 태그 ( 주로 둥근 모서리 버튼을 만들거나 기본 도형을 제작할 때 사용)

- <shape>

- <corners>

- <gradient>

- <size>

- <solid>

- <stroke>

 

 

실행 아이콘 리소스 minimap 디렉토리

 

값 리소스 : values 디렉토리

- 문자열 ,색상, 크기, 스타일, 배열 등의 값을 XML로 저장

- values 디렉토리의 리소스파일은 파일명이 R인 파일에 식별자로 등록되지않고 리소스 파일에 저장한 태그의 name 속성값에 등록된다.

<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>
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="txt_size"> 20sp </dimen>
</resources>

 

binding.textView.text = getString(R.string.txt_data1)
binding.textView.setTextColor(ResourcesCompat.getColor(resources,R.color.purple_500,null))
binding.textView.textSize = resources.getDimension(R.dimen.txt_size)

 

dimen 관련으로 오류가 나는데 나중에 해결하기로 했다.

 

 

 

스타일 리소스는 style, 태그로 등록

스타일 속성은 뷰에 설정되는 여러 속성을 스타일에 등록하여 한꺼번에 적용하거나 여러 뷰에 중복되는 속성을 스타일로 정의해 재사용한다. 스타일 정의 시 다른 스타일 상속받아 재정의할 수 있다.

왜 이러는 건지 잘 모르겠다

 

 

 

색상 리소스 - color 디렉토리

color 디렉터리의 리소스는 특정 뷰의 상태를 표현하고 그 상태에 적용되는 색상을 등록한다.

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:text="Click Me"
    android:textColor="@color/button_text"/>

button_text.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true"
        android:color="@color/purple_200"/>
    <item android:state_focused="true"
        android:color="@color/black"/>
    <item android:color="#ff000000" />
</selector>

 

 

 

글꼴 리소스는 -font 디렉터리

글꼴 리소스를 저장 할 수 있다.

TTF , OTF 파일을 저장한 후 글꼴을 적용할 뷰에서 이용

Pacifico - Download family

 

 

 

플랫폼 리소스 사용하기

안드로이드  플랫폼이 제공하는 리소스

android.R 이라는 플랫폼 라이브러리의 R파일에 등록되어 있다. @android:

플랫폼 라이브러리를 확인해보면 anim, color, drawable 많은 리소스 디렉토리가 있다.

 

 

리소스 조건 설정이란?

1인치당 도트가 몇 개 있나?

리소스를 특정 환경에서만 적용되도록 설정하는 것

아이콘이 선명하게 나오게 하려면 기기의 화면 밀도에 맞는 크기로 여러장의 이미지를 준비

리소스 조건 : 리소스 디렉토리 이름에서 붙임표(-) 뒤의 단어가 리소스의 조건 - mdpi , - hdpi , xhdpi 

리소스 조건의 종류로 언어, 화면크기도, 화면 방향 (portm land), 화면 픽셀 밀도 ldpi(dpi) 가 있다.

 

 

 

화면 회전에 대응하기 (weight 의 차이)

방향에 따라 화면을 다르게 제공

리소스 조건을 설정하여 처리할 수 있다.


세로방향으로 가중치를 준다면 높이를 0dp -> 높이가 변하니까

<?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="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:src="@drawable/kakao_logo"/>
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:src="@drawable/kakao_logo"/>
</LinearLayout>

가로방향으로 가중치를 준다면 너비를 0dp -> 너비가 변하니까

<?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="horizontal">
    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/kakao_logo"/>
    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/kakao_logo"/>
</LinearLayout>

 

 

액티비티 코드도 바꿔야함 왜냐면 만들어주는 view가 다르기 때문이다.

class MainActivity : AppCompatActivity() {

    lateinit var binding: ActivityMain2Binding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMain2Binding.inflate(layoutInflater)
        setContentView(binding.root) // 뷰 객체 생성

         }

 

 

 

국제 언어 제공하기

리소스 문자열을 각국 언어로 제공할 수 있다.

파일을 여러개 만들어서 각 언어에 맞는 리소스 문자열을 담고 어느 XML 파일을 적용해야 하는지를 리소스 디렉터리명으로 지정한다. 이때 프로젝트로 변경해야한다.

 

 

둘 다 작성해야 빨간 줄이 없어진다. 하나만 작성하면 오류 발생

 

 

 

설정창에서 language에 한국어를 추가하고 위로 올리면 한국어로 설정이 된다. 다시 앱으로 돌아가서 한국어로 변경되었는지 확인한다.