본문 바로가기

ANDROID의 속삭임

[android][기초][스타일/테마] style및 theme 적용하기.

※ 안드로이드의 스타일과 테마란?

- 스타일 : 스타일은 레이아웃 XML에 있는 하나의 엘리먼트를 대상으로 적용 할수 있는 속성들의 집합.

-  테마 : 테마는 어플래케이션내의 모든 액티비티 또는 하나의 액티비티 단위를 대상으로 하는 속성들의 집합.




1. 스타일 꾸미기.

- 'res/values' 디렉토리에 'styles.xml'이라고 하는 XML파일을 생성 하여 사용.

- 엘리먼트 구조 

<resources><!--루트 노드-->

<style name="스타일이름 입력" [parent="선택적으로 parent속성 입력"]>

<item style="속성명">속성값</item>

[<item style="속성명">속성값</item>

[<item style="속성명">속성값</item> [...]]]

</style>

      [

<style name="스타일이름 입력" [parent="선택적으로 parent속성 입력"]>

<item style="속성명">속성값</item>

[<item style="속성명">속성값</item>

[<item style="속성명">속성값</item> [...]]]

</style>

[

<style name="스타일이름 입력" [parent="선택적으로 parent속성 입력"]>

<item style="속성명">속성값</item>

[<item style="속성명">속성값</item>

[<item style="속성명">속성값</item> [...]]]

</style>

]

[...]

      ]

</resources>

※ parent 속성은 어떤 리소스로부터 스타일이 상속받는(ex>parent="@style/Text") 역할을 합니다. 스타일은 어떠한 유형의 리소스도 상속 할수 있는데, 일반적으로 항상 표준 안드로이드의 스타일 리소스를 상속 받은뒤, 변경할 부분만 바꾸어 주는 방식으로 주로 사용.


2. 테마 꾸미기.

가. 테마 만들기

- xml작성 요령은 비슷하나 적용방법은 다르다. 

- 또한 뷰단위로 적용할수 없음.(위에서 말한 style과 차이점.)

- 테마 선언의 예.

<?xml version=”1.0” encoding=”utf-8”?> 

<resources>

<style name=”CustomTheme”>

<item name=”android:windowNoTitle”>true</item> 

<item name=”windowFrame”>@drawable/screen_frame</item> 

<item name=”windowBackground”>@drawable/screen_background_white </item> 

<item name=”panelForegroundColor”>#FF000000</item>

<item name=”panelTextColor”>?panelForegroundColor</item> 

<item name=”panelTextSize”>14</item> <item name=”menuItemTextColor”>?panelTextColor</item> 

<item name=”menuItemTextSize”>?panelTextSize</item>

</style>

</resources>

※ 리소스 참조법.

- @를 통한 참조 : 이전에 미리 정의된 리소스를 참조한다는 의미.

- ?를 통한 참조 : 현재 로드된 테마에서 속성값을 찾아 참조한다는 의미.

※ 테마또한 parent 속성을 사용하여 상속이 가능하다.


나. 테마 추가하기

- AndroidManifest.xml파일에 추가 해준다.

- <application> 태그에 android:theme속성 추가 하여 적용 : 모든 액티비티에 테마를 설정.

- <activity> 태그에 android:theme속성 추가하여 적용 : 하나의 액티비티에 적용시 사용.

etc. JAVA소스 내에서 테마 추가하기.

- setTheme()메소드를 사용하는데, 이것은 컨텍스트 내에서 뷰를 인스턴스화 하기전에 테마 설정이 되야 한다는 조건이 있음. 즉, setContentView() 나 inflate()를 호출하기 전에 설정되야 한다는 뜻.

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState); // 다른 구현부분 setTheme(android.R.style.Theme_Light); setContentView(R.layout.linear_layout_3);

}





2013/05/20 - [모든것] - [android][AndroidManifest][설정]화면에서 상태바와 타이틀바 없애기.