TextView(Button) TextColor Selector 코드로 변경하기

Posted by ITPangPang
2016. 10. 7. 00:20 안드로이드(android)/알아두면 좋은것


TextView(Button)

TextColor Selector

코드로 변경하기


이번에는 글씨색깔 Selector 사용하는 부분에

    관해서 간단하게 써보겠습니다.


ㆍ 이전글 duplicateParentState에서도 뭐 비슷하게

    쓰긴 했었는데 한가지 더 알아야하는 부분을 써볼까

    합니다.


ㆍ 보통 눌림효과를 줄때 [drawable]에서 xml을 작성해서

    레이아웃 처음에 잡아줄때 넣을때가 있는데 이런 경우 말고

    코드상에서 눌림효과를 써줘야야 할 경우가 있습니다.



예를 들어서

음.. ON/OFF버튼으로

예를 들어볼까요?

 

일단 2개

그려놓긴 했는데


만약 처음에 OFF버튼이 있고

OFF버튼을 터치하면


오른쪽과 같이 ON버튼으로

변경되는 버튼이 있다고

가정해보겠습니다


그리고 다시 

ON버튼을 터치하면

OFF버튼으로 변경되겠죠?


자 이럴경우는

터치리스너 달아서

터치시 setTextColor와

setBackgroundResource

를 변경시켜주면

쉽게 해결됩니다.


그런데 눌림효과까지

동시에 주려 한다면

어떤식으로 코딩을

해야할까요?


음.. 이해를

돕기 위해서

간단하게 완성된

결과를 보면



참 제가

디자인적으로는

감각이 없어서

이상할 수 있는데


토글까지 시키면서

눌림효과를 줘야할 경우



자바코드에서

어떻게 짜야할지

간단하게 보면

(xml은 전부생략하겠습니다)


public class MainActivity extends AppCompatActivity
{

TextView tv;
boolean btnState = false;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tv = (TextView)findViewById(R.id.tv);
tv.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if(btnState)
{
btnState = false;
tv.setText("OFF");
tv.setBackgroundResource(R.drawable.off);
}
else
{
btnState = true;
tv.setText("ON");
tv.setBackgroundResource(R.drawable.on);
}
}
});
}
}


방법은 여러가지

있겠지만 이런식으로

짜면 토글효과가

나겠죠?


그런데 위 코드는

토글효과+Background 변경만

적용된 상태입니다


왜냐하면

background처럼

똑같이 변경하려고

setTextColor를

시도해보면


이런식으로 나옵니다


우리는 만들어놓은 xml을

넣기위해


int resid 형태로 넣어야되는데

찾아봐도 없습니다


이럴때 어떻게 해야하는가..!!

이거 한줄 설명하기 위해

위에 쓸때없는 말을 많이 썼습니다.


코드로 글씨색깔 눌림효과 주는 방법


방법은 위에 추천해주는

메소드에서


setTextColor(ColorStateList colors)

이것을 써야 합니다


그럼 일단 한번

써보겠습니다


자 이런식으로 원하는대로

넣어준 것 같은데 빨간줄이 뜹니다.


빨간줄이 뜨는 이유는

R.drawable <<< 이부분이 문제입니다

여기서는 R.drawable이 아닌

R.color 값이 들어가야합니다


자 그럼

color폴더를 만들어봅니다


자 이렇게 만들면 됩니다

[res]-[new]-[resource file]로

color 폴더를 만드셔도 되고


경로에 직접 찾아가서 만들어도 됩니다


color 폴더를 만든후에

눌림효과 코딩을 해놓은 

xml파일을 넣어줍니다


여기까지 완성됬으면

한번 R.color.color_on 이렇게

넣어봅니다.



넣어보면 color부분은

빨간줄이 안뜨는데

앞에 getColorStateList에서

빨간줄이 뜨면서 뭐라고 합니다


대충 읽어보면 api버전

문제관련입니다


deprecated가 됨으로

나오는 현상으로


이를 해결하기 위해서

아래와 같이 써주면

됩니다.


후...

결론은 아래 한줄만

알아두면 되는 것입니다..

(아 color 폴더를 만드는것도 나름 중요..)


원래 이 부분만 살짝 적을까하다가

나름 좀 제대로 설명하고 싶었는데


자세히 설명하기에는

xml 파일들 때문에 길어질 것 같고..

이 간단한 문제를 길게 쓰기에는 애매하고..


하다보니 이것도 저것도

안된것 같습니다..


뭔가 정리가 안된글..ㅠㅠ


1. color 폴더를 만든다

2.setTextColor(ContextCompat.getColorStateList(context ,R.color.xxx));

형태로 넣는다


이거 2가지만 알아두시면 될 것 같습니다