Как создается контекст в Android? Какова цель ContextThemeWrapper?
Я помогаю собрать эту страницу: что такое контекст?
Чтобы проиллюстрировать, как компоненты связаны с Context
, я создал эту диаграмму, просматривая исходный код рамки:
После того, как я раскололся, у меня возникли следующие вопросы:
- Что создает
Context
и какие конкретные классы используются? Базовый класс Context
сам по себе является абстрактным классом, который требует почти всех его методов для реализации. И ContextWrapper
, при ContextWrapper
экземпляра, требует, чтобы экземпляр Context
был передан в качестве базового контекста, поэтому должен быть хотя бы один конкретный класс Context
. - Я понимаю, что
ContextWrapper
и его подклассы используют шаблон оболочки/декоратора, чтобы добавить функциональность к базовому классу Context
мере необходимости. Какова цель ContextThemeWrapper
? Он переопределяет несколько методов, но если он обертывает базовый Context
, почему бы просто не делегировать вызовы базовому Context
? Например, класс Activity
расширяет ContextThemeWrapper
, который обеспечивает конкретную реализацию для getTheme()
и setTheme()
. Зачем?
Разработчики Java-разработчиков Android немного расплывчаты. Например, ContextWrapper
Ответы
Ответ 1
Ответ # 2:
ContextThemeWrapper добавляет поддержку контекста в контекст, иначе вы не сможете применить какую-либо тему к создаваемым представлениям. Вот почему макеты мероприятий поддерживают темы, а макеты виджетов - нет. Вы также можете создать ContextThemeWrapper самостоятельно, чтобы переопределить текущую тему другим.