developer tip

언제 Theme.AppCompat와 ThemeOverlay.AppCompat를 사용해야합니까?

optionbox 2020. 8. 13. 08:16
반응형

언제 Theme.AppCompat와 ThemeOverlay.AppCompat를 사용해야합니까?


다음 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의 의도 된 사용 사례가 무엇인지 궁금합니다.


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

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

ThemeOverlay + ActionBar

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

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

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

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


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 숨기기 및 도구 모음 사용

The whole point of using Theme.AppCompat rather than Theme.Material is so that we can allow older versions of Android to use our material design theme. The problem is that older versions of Android don't support the ActionBar. Thus, the documentation recommends hiding the ActionBar and adding a Toolbar to your layout. To hide the ActionBar we have to use one of the NoActionBar themes. The following images show the Toolbar with the ActionBar hidden.

여기에 이미지 설명 입력

But what if I want something like a Light theme with a DarkActionBar? Since I have to use NoActionBar, that isn't an option.

Overriding the App Theme

Here is where ThemeOverlay comes in. I can specify the Dark ActionBar theme in my Toolbar xml layout.

<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"

추가 연구

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

참고 URL : https://stackoverflow.com/questions/27238433/when-should-one-use-theme-appcompat-vs-themeoverlay-appcompat

반응형