TextView에서 소스코드 상에서 Color를 변경하면 제대로 변경이 되지 않아 문의드립니다.
현재 ListView는 TextView가 들어가 있고, Text Color를 아래 text_color.xml 파일로 지정해둔 상태입니다.
textColor="@color/text_color"
============================================================
<!-- text_color.xml -->
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="#000000" />
<item android:state_pressed="false" android:color="#7cbee1" />
<item android:color="#7cbee1"/>
</selector>
----------------------------------------------------------------------------------------------------------
<!-- text_color2.xml -->
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="#000000" />
<item android:state_pressed="false" android:color="#006eaa" />
<item android:color="#006eaa"/>
</selector>
=============================================================
이 상태에서 아래와 같이 List Adapter의 getView()에서 ListView의 배경색이 흰색인지 아니면 검정색인지에 따라
소스상에서 TextColor를 변경시키려고 하는데요...
=============================================================
ListView view = (ListView)findViewById(R.id.listview);
TextView tv = (TextView)itemView.findViewById(R.id.textview);
// 배경색 얻기
view.buildDrawingCache();
Bitmap bitmap = view.getDrawingCache();
int color = bitmap.getPixel(0, 0);
view.destroyDrawingCache();
// 배경색에 따른 색깔 지정
if( color == 0x000000 )
tv .setTextColor(R.color.text_color);
else
tv.setTextColor(R.color.text_color2);
=============================================================
제대로 적용이 안되고 검정색으로만 나오네요..-_ㅠ
배경색에 따라 if 문은 잘 들어가는데...
뭐가 문제일까요?ㅠㅠ
고수님들의 답변 부탁드립니다.!!
일반 상태와 pressed 상태에서 색이 달라지도록 해야해서 selector를 이용한 xml이 필요합니다. 혹 더 좋은 방법 알고계시면 알려주세요~''
문제해결했습니다.+ㅁ+
tv .setTextColor(view.getResources().getColor(R.color.text_color));
이렇게하니 정상적으로 되네요!+ㅁ+
getResources() 기억해두어야겠군요!ㅋ
최종적으로 적용한 소스는 아래와 같습니다. 똑같은 삽질을 방지하기 위해 답변 업로드합니다ㅋㅋ
============================================================
<!-- text_color.xml -->
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="#000000" />
<item android:state_pressed="false" android:color="#7cbee1" />
</selector>
----------------------------------------------------------------------------------------------------------
<!-- text_color2.xml -->
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="#000000" />
<item android:state_pressed="false" android:color="#006eaa" />
</selector>
=============================================================
xml은 위와 같이 <item android:color="#------"/> 부분을 삭제하고
소스부분에서는 getColor()가 아닌 getColorStateList()를 호출해야 정상동작합니다.
tv .setTextColor(view.getResources().getColorStateList(R.color.text_color));
참고하세요!''