ANDROID/Android 앱 프로그래밍

[Android] 위젯 속성 지정하는 헷갈리는 코드 (feat. Kotlin)

주 녕 2022. 3. 4. 06:03
728x90

개발을 하다보면 가끔 어.. 이 속성 코드로는 어떻게 지정하더라..? 하는 부분이 있어서

이 포스팅에 계속 정리해놓고 가끔 들여다 보려고 한다.

 

 

FontFamily 코드로 지정

커스텀 font의 경우 res > font 폴더를 생성하고, 원하는 폰트 ttf 파일을 넣어준다.

그리고 font 폴더에 font.xml 파일을 만들어 폴더에 넣은 폰트들을 설정해주면 다음과 같이 사용할 수 있다.

    binding.tvDate.typeface = resources.getFont(R.font.~)

✅ 레이아웃 파일에서는 android:fontFamily="~" 이지만, 코드로 지정할 때는 typeface 속성을 사용함

 

 

TextSize 코드로 지정

Text의 크기의 단위는 sp로 지정하여 디바이스의 OS 설정의 글자 크기에 영향을 받도록 한다.

    binding.tvDate.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20f)

 

 

Color 코드로 지정

1. 기본 제공 Color의 색상 사용

기본으로 제공되는 Color.java 파일에 들어가보면 BLACK, WHITE, RED, GRAY, LTGRAY 등을 볼 수 있다.

    binding.tvDate.setTextColor(Color.BLACK)

 

2. values > colors.xml의 색상 사용

하지만 우리는 보통 커스텀 컬러를 지정해서 사용하기 때문에 resource에 지정한 색을 가져오고 싶은 경우가 더 많다.

그럴 때는 다음과 같이 ContextCompat.getColor를 사용한다.

    binding.tvDate.setTextColor(ContextCompat.getColor(context, R.color.calendarColor))

✅ ContextCompat은 resource에서 값을 가져오거나 permission을 확인할 때 SDK 버전을 고려하지 않아도 되도록 처리된 클래스

 

 

 

Drawable 코드로 지정

 

 


 

사이즈를 직접 입력하는 경우 단위를 변환해야 하는 일이 발생한다.

특히 직접 사이즈를 입력하는 경우의 단위는 pixel이다. 따라서 같은 사이즈 값을 입력하더라도 레이아웃 파일에서 dp로 사이즈를 지정하는 경우와 다른 결과가 보여지게 된다. 이런 경우에는 직접 dp를 pixel로 변환해주어야 한다.

 

dp → px

fun dpToPx(dp: Int): Int {
        return TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP,
            dp.toFloat(),
            Resources.getSystem().displayMetrics).toInt()
    }

 

 

728x90