Як включити темну тему у додаток для Android

Для розробників створити додаток для Android - це простий процес - розробити привабливий інтерфейс - це насправді важко. Ось чому ми написали посібник "Як створити інтерфейс додатків для Android, який не засихає", для розробників, які потребують певного натхнення у створенні простих, але привабливих інтерфейсів. У цьому посібнику ми коротко згадували про додавання теми темного / нічного режиму до ваших програм, і в цьому посібнику ми проведемо вас через нього.

Додавання теми темного / нічного режиму до вашої програми може стати чудовим варіантом для ваших користувачів - це економить ресурс акумулятора, а набагато простіше для очей вночі. Білий фон на чорному тексті або будь-яка комбінація «яскравих» кольорів у вашому інтерфейсі дійсно напружує очі, особливо вночі. Таким чином, темний фон з більш світлим текстом набагато менш напружений і шкідливий для очей, тому багато популярних додатків почали включати темну тему - YouTube і Reddit останнім часом, хоча Facebook все ще не опублікував їх після обіцянки ще Може.

Якщо ви хочете легко додати переключений темний режим у додаток для Android, дотримуйтесь цього посібника зі служб Appuals та коментуйте, якщо у вас виникли проблеми!

Створення атрибутів XML

Спочатку потрібно створити файл атрибутів XML, який буде обробляти тематизацію. Це набагато краще, ніж включати два набори ресурсів у вашій APK для двох різних тем і тим самим роздувати ваш розмір APK, оскільки Android може своєрідно змінювати кольори за атрибутами через цей XML.

Тож у папці "ресурси" додатка створіть файл під назвою attrs.xml та додайте ці рядки ( це стильові атрибути):

До Lollipop ми не могли вказати атрибути для чернетки, тому нам довелося вказати ідентифікатори ресурсів для чернетки - однак це вже не так.

Додавання стилів

Щоб зробити цю роботу, нам потрібно створити два окремих стилі, які матимуть спільну базу. Перша, очевидно, буде вашою основною «світлою» темою, а друга - вашою «темною» темою.

 # F4F4F6 # 96F4F4F6 #FFFF # F2F2F3 @ dravable / i_light_plholder # 33343B / item> # 8033343B # 28292e # F2F2F3 @ dravable / i_dark_pholder 

Ось фактичні стилі для певної діяльності:

 # F4F4F6 # 33343B 

Вам потрібно вказати одну з цих тем у Manifest для активності програми, що в даному випадку - FeedActivity.

Стилізація поглядів

Ось приклад стилізації ваших поглядів - у цьому прикладі помилка переадресації «Сторінка не знайдена».

Як увімкнути динамічну комутацію тем

Найкращий і найефективніший спосіб увімкнути динамічну комутацію тем - це завантаження значення SharedPreference, яке використовується для зберігання налаштування в екземпляр програми за допомогою шаблону Singleton, а це означає, що нам не доведеться робити це на початку кожної діяльності.

 додаток public class розширює додаток {public static final String TAG = "Додаток"; private boolean isNightModeEnabled = false; @Override public void onCreate () {super.onCreate (); // Ми завантажуємо сюди стан нічного режиму SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences (це); this.isNightModeEnabled = mPrefs.getBoolean ("NIGHT_MODE", помилково); } public boolean isNightModeEnabled () {return isNightModeEnabled; } public void setIsNightModeEnabled (boolean isNightModeEnabled) {this.isNightModeEnabled = isNightModeEnabled; }} 

Оскільки цей екземпляр запускається раніше всього іншого, він дозволяє викликати isNightModeEnabled () Boolean коли завгодно, у будь-якій діяльності, що належить додатку після його відкриття.

 загальнодоступний кінцевий клас FeedActivity розширює AppCompatActivity {приватний остаточний статичний рядок TAG = “FeedActivity”; @Override захищений недійсним onCreate (пакет збереженихInstanceState) {if (MyApplication.getInstance (). IsNightModeEnabled ()) {setTheme (R.style.FeedActivityThemeDark); } super.onCreate (збереженийInstanceState); setContentView (R.layout.activity_feed); }} 

Однак якщо ви хочете застосувати іншу тему, ніж ту, яка вказана у файлі маніфесту, це потрібно зробити перед викликом батьківського методу onCreate ().

Встановлення стану за допомогою AppCompat

AppCompat дійсно корисний для широкого кола речей, і в цьому випадку ми будемо використовувати його для встановлення стану режиму. Це означає, що вам більше не потрібно використовувати примірник програми для створення кешованого стану, тим самим скорочуючи розширення кешу додатка ( хоча і дуже невеликим запасом ).

 AppCompatDelegate .setDefaultNightMode (AppCompatDelegate.MODE_NIGHT_YES); 

Тут ви можете використовувати:

  • AppCompatDelegate.MODE_NIGHT_YES

    AppCompatDelegate.MODE_NIGHT_NO

    AppCompatDelegate.MODE_NIGHT_AUTO

Вилучення держави

 AppCompatDelegate.getDefaultNightMode (); загальнодоступний кінцевий клас FeedActivity розширює AppCompatActivity {приватний остаточний статичний рядок TAG = “FeedActivity”; @Override захищений недійсним onCreate (пакет збереженихInstanceState) {if (AppCompatDelegate.getDefaultNightMode () == AppCompatDelegate.MODE_NIGHT_YES) {setTheme (R.style.FeedActivityThemeDark); } super.onCreate (збереженийInstanceState); setContentView (R.layout.activity_feed); }} 

Це повинно бути - ви можете продовжувати налаштовувати та налаштовувати значення на свій смак, але цей посібник - це чудове вступ, щоб розпочати роботу з включенням рідної темної теми у додаток для Android.

Цікаві Статті