drawableStart의 이미지 크기를 마음대로 변경하는 방법

Youngjik Yoon
PRND
Published in
5 min readFeb 4, 2022

TextView의 drawable크기를 변경할때 drawable을 항상 새로 만들고 계신가요?
xml에서 간단하게 drawable 크기를 변경하는 방법을 소개합니다.

안녕하세요.
헤이딜러 안드로이드팀의 윤영직입니다.

우리는 보통 TextView에 drawable을 추가할 때 다음과 같이 작성합니다.

<TextView
...
android:drawableStart="@drawable/ic_camera_24dp"/>

만약 다른화면에서 drawable 크기가 24dp가 아닌 16dp 크기가 필요하다면
새로운 drawable 파일을 만들어서 사용해야 합니다.

<TextView
...
android:drawableStart="@drawable/ic_camera_24dp"/>
<TextView
...
android:drawableStart="@drawable/ic_camera_16dp"/>

그런데 또 다른 화면에서도 마찬가지로 8dp, 32dp …가 필요하다면? 😱

drawableStart="@drawable/ic_camera_8dp"
drawableStart="@drawable/ic_camera_16dp"
drawableStart="@drawable/ic_camera_24dp"
drawableStart="@drawable/ic_camera_32dp"

...

이와 같이 단순히 크기만 변경될 뿐인데 매번 drawable을 새로 만드는 상황이 종종 오고는 합니다.

물론 ImageView + TextView를 이용하면 위 문제를 해결할 수 있습니다.
하지만 크기 변경 때문에 drawableStart를 사용하지 않고 매번 ImageView로 만들어야 하는가에 대한 의문이 있습니다.
(개발자마다 drawableStart, ImageView로 다르게 만드는것도 문제입니다)

헤이딜러 안드로이드팀은 언제나 그렇듯 귀찮고 반복되는 작업은 좋아하지 않습니다. 🤔

이 문제를 해결하기 위해 팀에서 논의를 하던 중…
커스텀뷰로 만들고 그냥 xml에서 크기를 직접 지정하면 안될까?를 생각하게 되었습니다.

| drawableStartSize, drawableEndSize 속성 정의

먼저 start, end 위치의 drawable 크기를 변경하기 위한 속성을 정의합니다.

// attrs.xml
<declare-styleable name="HeyDealerTextView">
<
attr name="drawableStartSize" format="dimension|reference" />
<
attr name="drawableEndSize" format="dimension|reference" />
</
declare-styleable>

| drawableStartSize drawableEndSize 초기화

다음으로 TextView를 상속한 커스텀 뷰에 앞서 정의한 속성을 초기화 합니다.

| drawableSize를 적용한 compoundDrawables 변경

마지막으로 compoundDrawablesdrawableStartSizedrawableEndSize를 적용한 새로운 drawable을 전달합니다.

| 결과

// xml
<HeyDealerTextView
...
android:drawableStart="@drawable/ic_camera_24dp"
app:drawableStartSize="dimension" />
// kotlin
textView.drawableStartSize = "dimension"
대충 앞으로 매번 ImageView 안만들어도 되서 행복한 짤

지금까지 TextView의 drawable 크기를 새로운 drawable을 만들지 않고 간편하게 변경하는 법을 공유드려 보았습니다.

이와 같은 방법을 사용하면 개발자가 원하는대로 변경이 가능하므로 요구사항에 맞는 디자인을 보다 편하게 만들 수 있습니다. 🎉

구현방법에 대한 전체 코드와 자세한 사용 방법은 아래 Github에서 확인해보실 수 있습니다.

저희와 함께 헤이딜러 서비스를 발전 시켜나가실 분들을 기다리고 있습니다.

위의 채용링크로 많은 지원부탁드립니다.

감사합니다.

--

--