AppCompatActivity는 안드로이드 Support 라이브러리(v7)에서 제공하는 Activity 클래스의 구현체중(이전에 사용하던 ActionbarActivity는 deprecated)에 하나이다. 이 구현체는 안드로이드 롤리팝에서 지원하는 머티리얼 디자인(Material Design)을 하위버전에서 사용하기 위해서 사용한다.
롤리팝 이전 UI 테마인 홀로(Holo) 테마에서 로고를 ActionBar의 좌측에 보여주고 있다. 안드로이드가 롤리팝으로 업데이트 되면서, UI 테마도 머터리얼 디자인으로 개선됐다. 개선된 UI 테마는 폰/태플릿에서 화면을 더 효율적으로 사용할 수 있게 도와주는 위젯인 NavigationDrawer를 사용하는 것을 가이드하고 있고, 이 UI 역시 다른 위젯과 같이 햄버거(줄 3개) 아이콘을 사용하고 있다. 이 햄버거 아이콘이 이전 UI 테마에서 사용하는 로고의 자리에 위치하게 된다.
하위 버전에서 머터리얼 디자인을 사용하지만, NavigationDrawer를 사용하지 않는 앱들도 종종 있다. 이런 앱들은 ActionBar 좌측에 앱의 로고를 보여주게 된다.
1. 테마를 수정하지 않은 경우의 ActionBar
아래 ActionBar 화면은 앱 프로젝트를 만든 후에 실행한 화면이다. 테마와 스타일을 수정하지 않은 기본 테마를 사용했다.
1.1 사용한 테마
<!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style>
2. 테마를 수정해서 ActionBar의 아이콘을 보여주는 화면
아래 ActionBar 화면은 위 프로젝트에 테마와 스타일을 약간 수정한 화면이다.
2.1 사용한 테마
위와 같은 ActionBar를 보여주기 위해서는, 아래처럼 Widget.AppCompat.Light.ActionBar를 상속한 AppThemeActionBarLogo를 기본 테마인 AppTheme의 actionBarStyle로 지정해서 ActionBar에 로고를 사용할 수 있다.
<!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="actionBarStyle">@style/AppThemeActionBarLogo</item> </style> <style name="AppThemeActionBarLogo" parent="@style/Widget.AppCompat.Light.ActionBar"> <item name="background">@color/colorPrimaryDark</item> <item name="logo">@mipmap/ic_launcher</item> <item name="displayOptions">useLogo|showHome</item> </style>