티스토리 뷰

Mobile/Android

[Android] Style 정의하기

해구름 2022. 7. 2. 22:43
반응형

Android에서는 Theme과 Style을 통해서 비주얼 속성을 미리 정의하고 재사용 할 수 있습니다. Style은 개별적인 View에 적용되는 비주얼 속성을 정의합니다. Theme은 앱 전체에 적용되는 속성들을 정의합니다. 만약 특정 Theme을 적용하면 앱 전체의 Activity, View가 영향을 받습니다.

Style의 정의 및 사용

  1. res/values 폴더에 styles.xml을 추가합니다.
    API 레벨 별로 Style을 적용할 수 있습니다. 예를들어 Android 5.0 (API 21) 이상에서 만 적용되어야 한다면 res/values-v21/styles.xml 형태로 정의할 수 있습니다.
    HelpImage
  2. styles.xml에 Style을 정의해주세요.
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <!-- parent 속성은 생략할 수 있음. 아래는 Support Library의 TextApperance를 상속받아 재정의하는 예 -->
        <style name="TextDefault" parent="TextAppearance.AppCompat">
            <item name="android:textColor">#333333</item>
            <item name="android:textSize">12sp</item>
        </style>
    
        <!-- parent 속성을 통해 다른 스타일 상속 가능 -->
        <style name="TextError" parent="TextDefault">
            <item name="android:textColor">#FF0000</item>
            <item name="android:background">#EEEEE</item>
        </style>
        
        <!-- Dot(.) 문자를 통해 다른 스타일 확장 가능 -->
        <style name="TextError.Critical">
            <item name="android:textStyle">bold</item>
        </style>
    </resources>
    
  3. 레이아웃 XML에서 style 속성을 통해 사용할 수 있습니다.
    <TextView
        style="@style/TextError"
        ... />
    

Theme의 정의 및 사용

  1. 프로젝트를 생성하면 /res/values/themes.xml이 생성되며 기본적인 Theme이 정의되어 있습니다. themes.xml 파일이 없다면 /res/values/themes.xml 파일을 추가하시면 됩니다.
  2. themes.xml 파일을 열고 원하는 형태로 Theme를 정의하시면 됩니다.
    <resources xmlns:tools="http://schemas.android.com/tools">
        <style name="BaseAppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
            <item name="colorPrimary">@color/colorPrimary</item>
            <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
            <item name="colorAccent">@color/colorAccent</item>
        </style>
        
        <!-- parent 속성을 통해 다른 Theme 상속 가능 -->
        <style name="AppTheme" parent="BaseAppTheme">
            <item name="android:windowActivityTransitions">true</item>
            <item name="android:windowEnterTransition">@android:transition/slide_right</item>
            <item name="android:windowExitTransition">@android:transition/slide_left</item>
        </style>
    </resources>
    
  3. Theme은 AndroidManifest.xml 파일에서 적용할 수 있습니다.
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="kr.test.testApp">
    
        <application
            android:label="@string/app_name"
            android:theme="@style/Theme.AppTheme" ...>
                ...    
            </application>
    </manifest>
    

References

댓글