Dev/Android

[Warning] 코드로 TextView 스타일 변경하기 (Normal, Bold, Italic...) - 예외상황

healthyryu 2018. 6. 8. 11:16

[Warning] 코드로 TextView 스타일 변경하기 (Normal, Bold, Italic...) - 예외상황



기본적으로 Textview 의 Style 변경은 Xml 파일에서 처리합니다. 그런데 클래스(Java or Kotlin)에서 처리도 합니다.


1. 클래스에서 TextView Style 변경

mTvSort.setTypeface(mTvSort.getTypeface(), Typeface.NORMAL);
mTvSort.setTypeface(mTvSort.getTypeface(), Typeface.BOLD);
mTvSort.setTypeface(mTvSort.getTypeface(), Typeface.ITALIC);


위와같이 Typeface 를 정해주면 된다. 그런데 저는 RecyclerView 의 Adapter 에서 특정 아이템에 대해서 Bold 처리를 하려고 했습니다.

레이아웃을 교체할 수도 있지만 저는 코드로 진행을 했습니다.

if (position == pick) {
holder.mTvName.setTypeface(holder.mTvName.getTypeface(), Typeface.BOLD);
holder.mTvPhone.setTypeface(holder.mTvPhone.getTypeface(), Typeface.BOLD);
holder.mView.setBackgroundColor(mContext.getColor(R.color.bright_blue));
}
else {
holder.mTvName.setTypeface(holder.mTvName.getTypeface(), Typeface.NORMAL);
holder.mTvPhone.setTypeface(holder.mTvName.getTypeface(), Typeface.NORMAL);
holder.mView.setBackgroundColor(mContext.getColor(R.color.TRANSPARENT));
}


그런데, 제가 참여하고 있는 서비스에서는 주력 모델이 Lenovo tb-8504f 이고 해당처리를 했을때, Bold 처리가 텍스트가 10번에 2~3번 Normal 로 적용이 되지 않았습니다. 그래서 저는 아래와 같이 특정 글꼴을 지정하고 Typeface.BOLD, Typeface.NORMAL 로 변경을 진행하니깐 텍스트 스타일이 제대로 변경되는걸 확인했습니다.

if (position == pick) {
holder.mTvName.setTypeface(Typeface.SERIF, Typeface.BOLD);
holder.mTvPhone.setTypeface(Typeface.SERIF, Typeface.BOLD);
holder.mView.setBackgroundColor(mContext.getColor(R.color.bright_blue));
}
else {
holder.mTvName.setTypeface(Typeface.SERIF , Typeface.NORMAL);
holder.mTvPhone.setTypeface(Typeface.SERIF, Typeface.NORMAL);
holder.mView.setBackgroundColor(mContext.getColor(R.color.TRANSPARENT));
}


즉, 나의 결론은 텍스트의 스타일을 변경하기 위해서 setTypeface() 함수를 사용할때 안드로이드 기본의 스타일getTypeface() 을 사용할 경우 가끔(?)씩 제대로 변경되지 않을수 있으니 특정 텍스트 폰트를 지정해서 사용하는게 좋을것 같다.

반응형