[android] TextView 코드로 생성하면서 style 적용하기

android 2013. 4. 10. 17:17

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

TextView에 글자크기나 글자색깔등의 속성을 묶어서 style로 만들어 놓고 쓰면 편리하다.

아래는 글자크기를 22sp, 색상은 white로 그리고 그림자효과(shadow)를 묶어서 style로 만들었다.

 

<style name="myTitleText">

        <item name="android:textSize">22sp</item>

        <item name="android:textColor">#ffffff</item>

        <item name="android:shadowColor">#4e000000</item>

        <item name="android:shadowDy">2</item>

        <item name="android:shadowRadius">1</item>

        <item name="android:gravity">center_vertical</item>

</style>

 

Xml 파일에서 간단하게 style을 설정하면 된다.

<Textview

       android:id="@+id/my_text"

       style="@style/myTitleText"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content" />

 

그런데 TextViewXML에 선언하지 않고 코드에서 생성해서 style을 적용하려니 잘 안된다. 처음에는 그냥 직접 속성들을 적용하였다.

 

textView.setTextSize(22);

textView.setTextColor(0xffffffff);

textView.setShadowLayer(1, 0, 2, 0x4e000000);

textView.setGravity(Gravity.CENTER_VERTICAL);

 

그러나 뭔가 개운치가 않다. style로 묶은 것은 해당 style을 재사용 하기 위한것인데, XML에 정의해서 다른곳에서 사용하는 부분과, 코드에서 직접 적용한 부분으로 2중으로 정의되어 있으면 향후 style이 변경되었을 때 두군데를 다고쳐야 한다. 유지 보수시에 실수하기 좋은 방식이므로 코드에서 XML에서 정의한 style을 불러다 쓰고 싶었다. 이것저것 찾아보다 TextView에서 setTextAppearance 라는 메소드를 제공한다. 이것을 사용하면 간단하게 적용 가능하다

 

textView = new TextView(getContext());

LayoutParams textParam;

textParam = new LayoutParams(30, 30); // 임의의 크기로 param 생성

textParam.width = LayoutParams.WRAP_CONTENT;

textParam.height = LayoutParams.MATCH_PARENT;

textParam.setMargins(getPaddingLeft(), getPaddingTop(), getPaddingRight(), getPaddingBottom());

                    

addView(textView, textParam);

textView.setTextAppearance(context, R.style.myTitleText);

 

주로 XML을 이용해서 UI 구성을 하다가 가끔 코드로 하려면 익숙지가 않다. 하지만 android도 내부적으로 어차피 XML을 읽어서 적용하는 것이기 때문에 각각의 XML에 매핑되는 함수들이 반드시 존재한다. 다만 가끔씩 직관적이지 않은 것들이 있을 뿐이다.

 



: