개발/안드로이드
[안드로이드]recycleview item의 특정 텍스트 색상 변경
핸디(Handy)
2019. 10. 15. 15:33
개선 요청 사항 : 검색창의 결과를 좀 더 직관적으로 보고싶다. 매칭되는 검색어에 해당하는 텍스트의 색상을 바꿔달라.
<기존>
보시다시피 recycleview의 item holder에서는 그냥 item의 정보를 가져와 setText로 입력해주는 방식이었습니다.
@Override
public void onBindViewHolder(@NonNull RoutelayoutFragment_find_location_Adapter.MyViewHolder holder, int position) {
try{
if(mDataset.get(position)!=null) {
fragment_home_second_pathlist_Item item = mDataset.get(position);
holder.place_name.setText(item.getPlace_name());
holder.category_name.setText(item.getCategory_name());
holder.address_name.setText(item.getRoad_address_name());
Log.d("testtesttest", item.getPlace_name() + " " + item.getX() + " " + item.getY());
}
}catch (IndexOutOfBoundsException e){
e.printStackTrace();
}
}
<개선>
개선결과, SpannableString을 이용하여 content(기존 text)를 가져오기 word라는 타켓텍스트를 설정하여 setSpan으로 색상을 바꾸게 되었습니다.
추가적으로 setSpan에는 색상변경 뿐만 아니라 글자 크기, 위치등 다양한 변경이 가능하니 확인해보시기 바랍니다.
@Override
public void onBindViewHolder(@NonNull RoutelayoutFragment_find_location_Adapter.MyViewHolder holder, int position) {
try{
if(mDataset.get(position)!=null) {
fragment_home_second_pathlist_Item item = mDataset.get(position);
// 기존 item의 string을 가져옴
String content = item.getPlace_name().toString();
SpannableString spannableString = new SpannableString(content);
// 타켓이 되는 word를 설정(색을 바꾸려는 text)
String word = find_location_edittext_text;
int start = content.indexOf(word);
int end = start + word.length();
// 타켓 word의 색상 변경
spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#438bff")), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//삽입
holder.place_name.setText(spannableString);
holder.category_name.setText(item.getCategory_name());
holder.address_name.setText(item.getRoad_address_name());
Log.d("testtesttest", item.getPlace_name() + " " + item.getX() + " " + item.getY());
}
}catch (IndexOutOfBoundsException e){
e.printStackTrace();
}
}
<끝>