본문 바로가기

Computer Science&Engineering/안드로이드

[java] 안드로이드 ListView 글자 색 바꾸기 | 배경 색 바꾸기 | 취소선 긋기

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 글자색 변경

 

 


# ListView의 배경 색 바꾸기

 

위와 같은 코드인데, setTextColor 대신에 tv.setBackgroundColor(Color.GRAY)를 넣어주었습니다.

setTextColor나 setBackgroundColor에 조건을 주면, 조건에 맞는 TextView만 색을 바꿔줄 수도 있습니다. 

 

ListView 배경 색 바꾸기

 


# 조건에 맞는 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에 취소선이 그어집니다.

 

반응형