Как правильно и современно реализовать темную тему приложения?

Реализация темной темы в приложении Android очень важна, так как она может значительно улучшить пользовательский опыт и расход энергии устройства. В этом ответе я расскажу о современном способе реализации темной темы в Android с использованием Material Design.

Использование ресурсов:
1. Создайте файл themes.xml в директории res/values и добавьте следующий код:

<resources>
    <!-- Светлая тема по умолчанию -->
    <style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
        <!-- Дополнительная настройка темы -->
    </style>
  
    <!-- Темная тема -->
    <style name="AppTheme.Dark" parent="Theme.MaterialComponents">
        <!-- Дополнительная настройка темы -->
    </style>
</resources>

Обратите внимание, что мы используем стили из библиотеки Material Components (Theme.MaterialComponents.Light.DarkActionBar и Theme.MaterialComponents), чтобы обеспечить совместимость с разными версиями Android.

2. Создайте файл colors.xml в директории res/values и добавьте следующий код:

<resources>
    <!-- Определение цветов для светлой темы -->
  
    <!-- Определение цветов для темной темы -->
    <color name="colorPrimary_dark">#212121</color>
    <color name="colorPrimaryVariant_dark">#000000</color>
    <color name="colorOnPrimary_dark">#FFFFFF</color>
    <!-- ... остальные цвета для темной темы -->
</resources>

В этом файле вы можете определить цвета для светлой и темной темы. Здесь я указал только несколько примеров цветов для темной темы.

3. Создайте файл styles.xml в директории res/values и добавьте следующий код:

<resources>
    <style name="TextAppearance.App.Title" parent="TextAppearance.MaterialComponents.Headline6">
        <item name="fontFamily">@font/your_custom_font</item>
    </style>
</resources>

В этом файле вы можете настроить внешний вид элементов UI для светлой и темной темы.

Настройка приложения:
1. В MainActivity добавьте следующий код:

public class MainActivity extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      
        // Установка темы в соответствии с пользовательскими настройками
        if (isDarkThemeEnabled()) {
            setTheme(R.style.AppTheme_Dark);
        } else {
            setTheme(R.style.AppTheme);
        }
      
        setContentView(R.layout.activity_main);
      // ... остальной код активити
    }
  
    private boolean isDarkThemeEnabled(){
        // Получение настроек из SharedPreferences
        // Возвращает true, если темная тема включена, иначе false
    }
}

2. Используйте утилиты Material Design для добавления темных цветов в ваши различные элементы пользовательского интерфейса.

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="My Button"
    app:backgroundTint="@color/colorPrimary_dark"
    android:textColor="@color/colorOnPrimary_dark" />

Это основные шаги для реализации темной темы в приложении Android. Благодаря использованию Material Design и соответствующих ресурсов, вы сможете создать современный и привлекательный внешний вид для вашего приложения.