반응형
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 디렉토리에 복사 후 아래 예제를 시작
<?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
<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
<?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 |