머테리얼 디자인을 미지원 OS 버전에서도 호환되도록 해보자.

marojun
marojun’s Android
5 min readOct 20, 2014

--

테마 또는 커스텀 액티비티 전환등의 특정 머테리얼 디자인 기능들은 Android 5.0 이상의 버전에서 사용가능합니다. 그럼 5.0 보다 낮은버전에 대해서는 어떻게 해야될까요? 여기서는 머테리얼이 적용 가능한 버전에 대해서는 해당 디자인을 활용하되, 미지원 버전의 경우 오류가 발생하지 않도록하며 일부 머테리얼 기능은 Support Library 통해 적용하는 방법을 알아보도록 하겠습니다.

Define Alternative Styles

앱에서의 간단한 설정을 통해 머테리얼 디자인을 지원하는 경우 해당 테마를 사용하고 지원하지 않는 이전 버전의 안드로이드에서는 예전 테마를 쓰도록 정의 할 수 있습니다.

1. Holo 테마와 같은 이전 버전의 테마는 아래의 경로에 선언하고
res/values/styles.xml.

2. 같은 이름으로 머테리얼 테마는 아래처럼 정의합니다.
res/values-v21/styles.xml

3. 이후 해당 테마를 manifest 에 정의하면 끝!

핵심은 values 폴더를 통해 버전별 분기를 진행하는 것입니다.
만약 5.0 아래 버전의 경우에서 머테리얼 테마만 정의되어 있다면 앱은 실행되지 않으니 꼭 지원버전을 생각해 위와같이 대응하셔야 합니다.

Provide Alternative Layouts

머테리얼 디자인 가이드라인을 기준으로 디자인 된 레이아웃이라도 Android 5.0 에 소개된 새로운 XML 속성들을 사용하지 않는다면 이전 버전의 안드로이드에서 동작합니다.

그러나 테마처럼 대체 레이아웃을 통해 버전별로 다른 레이아웃이 노출되도록 할 수 있습니다. Android 5.0의 레이아웃은 res/layout-v21, 이전 버전의 레이아웃은 res/layout/ 에 정의합니다.

또한 코드 중복을 피하기 위해 기본적인 스타일에 대해서는 res/values/에 정의하고, 새로운 API에 대한 것들은 res/values-v21/에 정의하도록 합니다.

Use the Support Library

v7 Support Libraries r21 이상의 라이브러리는 몇몇의 머테리얼 기능을 제공합니다.

이를 통해 Theme.AppCompat 테마의 Color palette theme attributes 을 사용할 수 있으며
RecyclerView 를 통해 데이터를 표현하고
CardView 를 통해 카드를 만들고
Palette 를 통해 이미지의 대표컬러를 추출할 수 있습니다.

System widgets

Theme.AppCompat 테마는 다음과 같은 머테리얼 디자인 스타일을 제공합니다.

1. EditText
2. Spinner
3. CheckBox
4. RadioButton
5. SwitchCompat
6. CheckedTextView
7. Color Palette

Android v7 Support Library 를 통해 커스터마이징한 color palette를 이용, 머테리얼 스타일을 적용하기 위해선 아래와 같이 Theme.AppCompat 테마중 하나를 사용해야합니다.

Lists and Cards

RecyclerView 와 CardView 위젯들은 Android v7 Support Library 을 통해 5.0 이전버전에서도 구현 가능하나 다음과 같은 제한이 있습니다.

- CardView falls back to a programmatic shadow implementation using additional padding.
- CardView does not clip its children views that intersect with rounded corners.

Dependencies

5.0 이전의 버전에서 이러한 기능을 사용하려면 프로젝트의 Gradle dependency 에 다음과 같이 정의합니다.

Check the System Version

아래 기능들은 오직 5.0 이상의 버전에서만 동작합니다.

1. Activity transitions
2. Touch feedback
3. Reveal animations
4. Path-based animations
5. Vector drawables
6. Drawable tinting

이전 버전의 안드로이드에서 해당 API들을 수행하여 에러가 나지 않도록 하기 위해 아래와 같이 버전 체크를 통해 분기처리를 하도록 합니다.

앱에서 지원하는 기능들에 대한 버전을 지정하려면 android:minSdkVersion 과 android:targetSdkVersion 속성을 manifest 파일에 정의합니다. 5.0 에서의 머테리얼 디자인 기능들을 사용하려면 android:targetSdkVersion 속성을 21로 정의해야 합니다. 더 자세한 내용은 <uses-sdk> API guide 을 참조하세요.

--

--

marojun
marojun’s Android

전슬마로. KTH, SK Planet, NCSOFT 에서 iOS와 Android를 개발하고 있다. — 안드로이드 개발 그룹 https://www.facebook.com/groups/junsle/