ArrayList 를 만들어서 ListView에 뿌려줄 때, 각각 배경 색이나 글자색을 바꿔주는 방법입니다.
ArrayAdapter의 getView를 Override해주면 됩니다.
# ListView의 글자 색 바꾸기
myAdapter = new ArrayAdapter<RssItem>(
getApplicationContext(),
android.R.layout.simple_list_item_1,
myList){
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView tv = (TextView)view.findViewById(android.R.id.text1);
tv.setTextColor(Color.GRAY);
return view;
}
};
예시 화면
# ListView의 배경 색 바꾸기
위와 같은 코드인데, setTextColor 대신에 tv.setBackgroundColor(Color.GRAY)를 넣어주었습니다.
setTextColor나 setBackgroundColor에 조건을 주면, 조건에 맞는 TextView만 색을 바꿔줄 수도 있습니다.
# 조건에 맞는 TextView에만 배경색 주기
만약 memo의 getDone이 true 일때 배경을 회색으로 바꿔주고, getDone이 false이면 흰색을 나타내보겠습니다.
memoAdpater = new ArrayAdapter<Memo>(this, android.R.layout.simple_list_item_1, memos){
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView tv = (TextView)view.findViewById(android.R.id.text1);
if(memos.get(position).getDone()) tv.setBackgroundColor(Color.GRAY);
else tv.setBackgroundColor(Color.WHITE);
return view;
}
};
Adapter 는 이런식으로 짜주고, memo의 Done 상태가 바뀔때마다 memoAdpater.notifyDataSetChanged()를 호출해주면 됩니다.
그럼 아래와 같이 상태가 완료(getDone이 true 일 때)로 바뀔 때 배경이 회색으로 변하게 됩니다.
# ListView 에 취소선 긋기
if 문에서 setBackgroundColor 대신에 tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG)으로 취소선을 그어주면 됩니다.
if(memos.get(position).getDone()) tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
else tv.setPaintFlags(0);
그럼 ListView에서 조건에 맞는 TextView에 취소선이 그어집니다.
반응형
'Computer Science&Engineering > 안드로이드' 카테고리의 다른 글
[안드로이드] 아래로 당겨 새로고침 Swipe refresh layout (0) | 2021.05.14 |
---|---|
[java] 안드로이드 인터넷 퍼미션 허용하기 (0) | 2021.05.12 |
공모전) 안드로이드 스튜디오 가상장치 생성하기 | AVD생성 (0) | 2020.08.17 |
공모전) 안드로이드 새 프로젝트 생성하기 (0) | 2020.08.17 |