[android] 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 숨기기 및 도구 모음 사용
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"
추가 연구
나는 실험과 다음 기사를 통해 이것을 배웠다.