[TIL] 2019-11-28
28 Nov 2019 | TILToday I Learned
조건이 여러개일 때 조건문을 깔끔하게 작성하기가 어렵다. 두 가지 조건이 있다.
- item의 상태가 selected일 때(isSelected = true) textView의 색상은 파란색, 반대의 경우에는 빨간색.
- 빌드 버전에 따라 사용할 수 있는 getColor api가 다르다. 23레벨 이상의 getColor에는 color값과 더불어 theme값을 넣어주어야 한다.
내가 작성한 코드. 구구절절 조건을 나열했고 필요없는 반복이 많다.(구질구질..) 어떻게든 수정해보려고 했는데 잘 안되었다.
if(isSelected) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
textView.setTextColor(resources.getColor(R.color.blue, null))
} else {
textView.setTextColor(resources.getColor(R.color.blue))
}
} else {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
textView.setTextColor(resources.getColor(R.color.red, null))
} else {
textView.setTextColor(resources.getColor(R.color.red))
}
}
CTO님의 손길을 통해 개선된 코드
val getColor = { resourceId: Int ->
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES>M) {
resources.getColor(resourceId, null)
} else {
resources.getColor(resourceId)
}
}
tagTextView.setTextColor(getColor(if (isSelected)
R.color.fixed_text_title
else
R.color.text_title
))
최대한 중복되는 부분을 줄이고 바뀌는 부분만 변화하는 형태로 코드를 짜도록 하자.
Comments