Как включить темную тему в ваше приложение для Android

Для разработчиков создание приложения для Android - это простой процесс, а создание привлекательного пользовательского интерфейса - это то, что на самом деле сложно. Вот почему мы написали руководство «Как создать пользовательский интерфейс приложения для Android, который не отстой», для разработчиков, которым требуется вдохновение для создания простых, но привлекательных пользовательских интерфейсов. В этом руководстве мы кратко упомянули добавление темы темного / ночного режима в ваши приложения, и в этом руководстве мы расскажем вам о ней.

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

Если вы хотите легко добавить переключаемый темный режим в свое приложение для Android, следуйте этому руководству Appuals и оставляйте комментарии, если у вас возникнут какие-либо проблемы!

Создание атрибутов XML

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

Итак, в папке «ресурсы» вашего приложения создайте файл с именем attrs.xml и добавьте следующие строки ( это настраиваемые атрибуты):

До Lollipop мы не могли указывать атрибуты для рисования, поэтому нам приходилось указывать идентификаторы ресурсов для рисования - однако это уже не так.

Добавление стилей

Чтобы сделать это, нам нужно создать два отдельных стиля, которые будут использовать одну и ту же базу. Первая, очевидно, будет вашей основной «светлой» темой, а вторая будет вашей «темной» темой.

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

Вот фактические стили для данного действия:

 # F4F4F6 # 33343B 

Вам необходимо указать одну из этих тем в манифесте для активности приложения, в данном случае это FeedActivity.

Стилизация видов

Вот пример стилизации ваших представлений - в этом примере это ошибка перенаправления «Страница не найдена».

Как включить динамическое переключение тем

Лучший и наиболее эффективный способ включить динамическое переключение тем - загрузить значение SharedPreference, которое используется для сохранения настройки в экземпляре приложения с использованием шаблона Singleton, что означает, что нам не придется делать это в начале каждого действия.

 открытый класс App расширяет приложение {public static final String TAG = "App"; приватный логический isNightModeEnabled = false; @Override public void onCreate () {super.onCreate (); // Здесь мы загружаем состояние ночного режима SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences (this); this.isNightModeEnabled = mPrefs.getBoolean («NIGHT_MODE», false); } public boolean isNightModeEnabled () {return isNightModeEnabled; } public void setIsNightModeEnabled (boolean isNightModeEnabled) {this.isNightModeEnabled = isNightModeEnabled; }} 

Поскольку этот экземпляр запускается раньше всего, он позволяет вам вызывать isNightModeEnabled () Boolean всякий раз, когда вы хотите, в любой активности, принадлежащей приложению, после его открытия.

 открытый финальный класс FeedActivity extends AppCompatActivity {приватная финальная статическая строка TAG = «FeedActivity»; @Override protected void onCreate (BundlevedInstanceState) {if (MyApplication.getInstance (). IsNightModeEnabled ()) {setTheme (R.style.FeedActivityThemeDark); } super.onCreate (saveInstanceState); 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 extends AppCompatActivity {приватная финальная статическая строка TAG = «FeedActivity»; @Override protected void onCreate (BundlevedInstanceState) {if (AppCompatDelegate.getDefaultNightMode () == AppCompatDelegate.MODE_NIGHT_YES) {setTheme (R.style.FeedActivityThemeDark); } super.onCreate (saveInstanceState); setContentView (R.layout.activity_feed); }} 

Так и должно быть - вы можете продолжать настраивать и настраивать значения по своему вкусу, но это руководство является отличным введением, с которого вы можете начать с включения нативной темной темы в ваше приложение для Android.

Интересные статьи