Theme.AppCompat 대 ThemeOverlay.AppCompat는 언제 사용해야합니까?


114

다음 Theme.AppCompat 클래스가 있습니다.

Theme.AppCompat
Theme.AppCompat.Light
Theme.AppCompat.Light.DarkActionBar
Theme.AppCompat.NoActionBar
Theme.AppCompat.Light.NoActionBar
Theme.AppCompat.DialogWhenLarge
Theme.AppCompat.Light.DialogWhenLarge
Theme.AppCompat.Dialog
Theme.AppCompat.Light.Dialog
Theme.AppCompat.CompactMenu

및 다음 ThemeOverlay.AppCompat 클래스 :

ThemeOverlay.AppCompat
ThemeOverlay.AppCompat.Light
ThemeOverlay.AppCompat.Dark
ThemeOverlay.AppCompat.ActionBar
ThemeOverlay.AppCompat.Dark.ActionBar

예를 들어 ThemeOverlay.AppCompat.light 대 Theme.AppCompat.Light를 사용하는 이유는 무엇입니까? ThemeOverlay에 대해 정의 된 속성이 훨씬 적다는 것을 알았습니다. ThemeOverlay의 의도 된 사용 사례가 무엇인지 궁금합니다.

답변:


71

AppCompat 제작자 의이 테마 대 스타일 블로그 게시물 :

[ThemeOverlays]는 일반 Theme.Material 테마를 오버레이하는 특수 테마로 관련 속성을 덮어 써 밝게 / 어둡게 만듭니다.

ThemeOverlay + ActionBar

당신을 예리한 눈으로 본다면 ActionBar ThemeOverlay 파생물도 보셨을 것입니다.

  • ThemeOverlay.Material.Light.ActionBar
  • ThemeOverlay.Material.Dark.ActionBar

actionBarTheme속성을 통해 작업 표시 줄과 함께 사용 하거나 툴바에서 직접 설정해야합니다.

이러한 현재 부모 다르게 할 수있는 유일한 일이 그들이 변화이다 colorControlNormal것으로 android:textColorPrimary, 따라서 텍스트를 만들고 아이콘 불투명.


155

Theme.AppCompat는 전체 앱의 글로벌 테마를 설정하는 데 사용됩니다. ThemeOverlay.AppCompat는 특정보기, 특히 도구 모음에 대한 해당 테마를 재정의 (또는 "오버레이")하는 데 사용됩니다.

이것이 왜 필요한지에 대한 예를 살펴 보겠습니다.

ActionBar가있는 앱 테마

ActionBar는 일반적으로 앱에 표시됩니다. colorPrimary값 을 설정하여 색상을 선택할 수 있습니다 . 그러나 테마를 변경하면 ActionBar의 텍스트 색상이 변경됩니다.

<style name="AppTheme" parent="Theme.AppCompat">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

여기에 이미지 설명 입력

기본 색상은 진한 파란색이므로 검은 색 텍스트는 읽기 어렵 기 때문에 작업 표시 줄에서 밝은 텍스트 색상을 사용하는 테마 중 하나를 사용해야합니다.

ActionBar 숨기기 및 도구 모음 사용

Theme.Material 대신 Theme.AppCompat를 사용하는 요점은 이전 버전의 Android에서 머티리얼 디자인 테마를 사용할 수 있도록 허용하는 것입니다. 문제는 이전 버전의 Android가 ActionBar를 지원하지 않는다는 것입니다. 따라서 문서 는 ActionBar를 숨기고 레이아웃에 툴바를 추가 할 것을 권장합니다. ActionBar를 숨기려면 NoActionBar테마 중 하나를 사용해야 합니다. 다음 이미지는 ActionBar가 숨겨진 툴바를 보여줍니다.

여기에 이미지 설명 입력

하지만 DarkActionBar가있는 Light 테마와 같은 것을 원한다면 어떻게해야합니까? NoActionBar를 사용해야하므로 옵션이 아닙니다.

앱 테마 재정의

여기에 ThemeOverlay가 있습니다. 툴바 xml 레이아웃에서 Dark ActionBar 테마를 지정할 수 있습니다.

<android.support.v7.widget.Toolbar
    ...
    android:background="?attr/colorPrimary"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

이것은 마침내 우리가 원하는 효과를 가질 수있게합니다. Dark.ActionBar 테마 는이 특별한 경우에 Light 앱 테마를 오버레이 합니다.

여기에 이미지 설명 입력

  • 앱 테마 : Theme.AppCompat.Light.NoActionBar
  • 툴바 테마 : ThemeOverlay.AppCompat.Dark.ActionBar

팝업 메뉴를 밝게하려면 다음을 추가 할 수 있습니다.

app:popupTheme="@style/ThemeOverlay.AppCompat.Light"

추가 연구

나는 실험과 다음 기사를 통해 이것을 배웠다.


Themeoverlay를 사용할 때 상태 표시 줄을 투명하게 만드는 방법은 무엇입니까?
gegobyte

새로운 MaterialToolbar로 이것을 달성하는 방법이 궁금합니다
David

@David, 저는 현재 주로 Flutter와 함께 일하고 있으므로 새로운 Android 개발을 따라 가지 못했습니다. 답을 찾으면 여기로 돌아와 댓글을 남기거나 내 답변을 수정하거나 자신의 답변을 추가하세요.
Suragch
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.