Android > styles & Themes
등록일 : 2017-07-05 18:13
조회수 : 93,781
스타일이나 테마는 폰트 종류&크기&색, 배경색 같은 것들을 미리 정의해 놓고 여러 UI 요소들에서 공유해서 사용하는 기법이다.
이 둘의 차이점은 다음과 같다.
- 스타일 : 하나의 엘리멘트 단위로 적용할 수 있는 하나 또는 그 이상의 포맷팅 애트리뷰트의 집합
- 테마 : 액티비티 단위로 적용할 수 있는 하나 또는 그 이상의 포맷팅 애트리뷰트의 집합
자세한 내용은 다음 장에서 설명하기로 하고 그럼 이런 테마를 쓰게 되면 어떤 장점이 있을까?
1.어플레케이션 용량 저하 : 이미지가 아닌 스타일 & 테마로 App을 만들게 되면 2MB 정도로 왠만한 앱을 만들 수 있다고 한다.
2.스타일의 재사용 : 잘 정의된 스타일&테마의 경우 재사용성이 높아서 앱의 Look & Feel 만 유사하다면 그대로 사용이 가능하다.
3.수정의 용의성 : 한 곳에서 수정을 하면 전체 App의 모습이 변하므로 수정이 쉽다.
1. 스타일 (Styles)
앞에서 엘리먼트 단위로 지정하는 것이 Style이라고 이야기 했다. 즉, View 당 지정할 수 있다고 생각하면 된다.
res/value/styles.xml 파일에 설정된다.
<?xml version=”1.0” encoding=”utf-8”?>
<resources>
<style name="SpecialText" parent="@style/Text">
<item name="android:textSize">18sp</item>
<item name="android:textColor">#008</item>
</style>
</resources>
- parent : 전체 스타일을 지정하지 않고 기존의 스타일을 약간만 바꿀 경우에 부모 Style을 지정하는 필드
- item에는 문자열, 16진수 색상값, 다른 리소스 참조 등이 가능하다.
적용하기
<EditText id="@+id/text1"
style="@style/SpecialText"
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Hello, World!” />
- style Attribute를 통해서 스타일을 지정할 수 있다.
3. 테마 (Themes)
A. 생성 방법
res/value/themes.xml 파일에 저장한다. (디폴트로 존재하는 파일이 아니다!)
<?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="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>
B. 적용하기
App 전체에 적용을 하거나 Activity 단위로 적용이 가능하기 때문에 결국 AndroidMenifest.xml 파일을 수정해야 한다.
아래는 App 전체에 지정하는 방법이다.
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/CustomTheme" >
아래는 하나의 Activity에 적용하는 방법이다.
<activity
android:name=".OptionMenuMainActivity"
android:label="kkangeva.tistory.com"
android:theme="@style/CustomTheme">