자바코드로 res(리소스)에 있는 string, color 사용하기

Posted by ITPangPang
2016. 6. 16. 01:38 안드로이드(android)/알아두면 좋은것


자바코드로 res(리소스)에 있는 

string, color 사용하기


ㆍ이번에는 자바코드로 res폴더에 있는 string과 color를

   꺼내써보도록 하겠습니다.


ㆍxml에서 쓰면 간단하지만 UI를 동적으로 바꿀때는 

   코드에서 사용하는 법을 알아야 합니다.


ㆍ간단한건 하드코딩 해도 되지만.. 습관이란게 중요하므로

   간단한것도 하드코딩은 최대한 피하도록 ~



뭐 바로 일단

[res]-[values]-[string.xml]로 

가서 String resources를 하나

만들어줍니다.


이런식으로 대충 만들고

자바코드로 넘어와서

사용해보겠습니다.


음 TextView 하나를

만들어서 거기다가

저 Hi~를 setText해보겠습니다


간단한 테스트이므로

그냥 xml 없이

동적으로 만들어보겠습니다.


public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
LinearLayout ll = new LinearLayout(this);
TextView tv = new TextView(this);
tv.setText(getString(R.string.tv_text));
ll.addView(tv);
setContentView(ll);
}
}


자 이런식으로 만들면

됩니다.


여기서 중요한 부분은

tv.setText(getString(R.string.tv_text));

이 부분이겠죠?


다시 한번 더 

강조해서 본다면

getString(R.string.tv_text)


결과도 한번

보도록 하겠습니다.


문제 없이 잘 출력됬습니다.


뭐 String 배열로 쓴다고 해도

사용방법은 똑같습니다.

대충 아래와 같이

비슷하게 적어줍니다.

public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);

String textArray[] = {getString(R.string.tv_text_a),getString(R.string.tv_text_b),getString(R.string.tv_text_c)};
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
TextView tv = new TextView(this);
tv.setText(textArray[0]+"\n"+textArray[1]+"\n"+textArray[2]);
ll.addView(tv);
setContentView(ll);
}
}


이런식으로 똑같이

getString(R.string.XXX)

배열에 담은다음에

setText하면 됩니다.

짜잔~


그리고 한가지 더

알아보자면


위에 getString(~~~)은

Activity가 아닌곳에서는

에러가 뜨게 됩니다.

그럴경우 앞에 Context.getResources()를 붙여주면 됩니다.


뭐 바로 간단하게 

클래스 하나 만들어서 

확인해보면


위 사진처럼 

getResources().만 붙이면

아까와 똑같이 사용할 수 있습니다




자 다음

Color로 넘어가면

Color도 String과 뭐

똑같습니다.


[res]-[values]-[color]로

가서 원하는 색깔을

넣어줍니다.


대충 넣으시고~

자바로 와서 아까처럼 똑같이

써주시는데


뭐 크게 중요한 부분은 

아니지만 Color는 살짝 고려해야할 부분이 있습니다


아까처럼 똑같이 getColor를 써보겠습니다.

위에서 만든 TextView에 바로 입혀서

테스트 해보면 되겠네요


아까 처럼 똑같이 쓰려는데

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

뭐 타겟버전 어쩌구군요


Alt+Enter를 눌러보면

다양한 해결방법이 나옵니다


뭐 추천해주긴 하는데

그닥 쓰고 싶어지는건 없습니다


아까처럼 앞에 getResources를 붙여보죠


아놔 이건 또 뭔지..

deprecated..

역시 찜찜합니다.


그래서 

찜찜함을 해결하기 위해

결론적으로

아래코드를 써줍니다

ContextCompact.getColor(Context, R.color.XXX)

자 뭐라는지 모르겠지만

그냥 써보면 되죠


하라는데로 똑같이 넣어줍니다

오호

빨간줄이나 deprecated도

안뜹니다.


잘 돌아가는지 돌려보죠


오호~

잘돌아갑니다


마지막으로 한번 더 외쳐봅시다

ContextCompact.getColor(Context, R.color.XXX);

컨텍스트 컴팩트 쩜 겟칼라


public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);

String textArray[] = {getString(R.string.tv_text_a),getString(R.string.tv_text_b),getString(R.string.tv_text_c)};
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
TextView tv = new TextView(this);
tv.setText(textArray[0]+"\n"+textArray[1]+"\n"+textArray[2]);
tv.setTextColor(ContextCompat.getColor(this, R.color.pangpangColorRed));
ll.addView(tv);
setContentView(ll);
}
}