Содержание
Для разработчиков создание приложения Android — это простой процесс, а создание привлекательного пользовательского интерфейса — это то, что на самом деле сложно. Вот почему мы написали руководство «Как создать пользовательский интерфейс приложения для Android, который не отстой», для разработчиков, которым нужно вдохновение в создании простых, но привлекательных пользовательских интерфейсов. В этом руководстве мы кратко упомянули добавление темы темного / ночного режима в ваши приложения, и в этом руководстве мы расскажем вам о ней.
Добавление темы темного / ночного режима в ваше приложение может быть отличным вариантом для ваших пользователей — оно экономит заряд аккумулятора и намного проще для глаз ночью. Белый фон на черном тексте или любая комбинация «ярких» цветов в вашем пользовательском интерфейсе действительно создает стресс для глаз, особенно ночью. Таким образом, темный фон с более светлым текстом гораздо менее стрессовый и вредный для глаз, поэтому многие популярные приложения начали использовать темную тему — YouTube и Reddit совсем недавно, хотя Facebook до сих пор не опубликовал свои после обещания вернуться в Май.
Если вы хотите легко добавить переключаемый темный режим в свое приложение для Android, следуйте этому руководству Appuals и оставляйте комментарии, если у вас возникнут какие-либо проблемы!
Создание атрибутов XML
Сначала вам нужно создать файл атрибутов XML, который будет обрабатывать темы. Это гораздо лучше, чем включать два набора ресурсов в ваш APK для двух разных тем и, таким образом, увеличивать размер вашего APK, так как Android может изменять цвета атрибутов через этот XML.
Итак, в папке «resources» вашего приложения создайте файл с именем attrs.xml и добавьте следующие строки (это настраиваемые атрибуты):
До Lollipop мы не могли указывать атрибуты для рисования, поэтому нам приходилось указывать идентификаторы ресурсов для рисования — однако это уже не так.
Добавление стилей
Чтобы сделать это, нам нужно создать два отдельных стиля, которые будут использовать одну и ту же базу. Первая, очевидно, будет вашей основной «светлой» темой, а вторая будет вашей «темной» темой.
# F4F4F6 # 96F4F4F6 #FFFF # F2F2F3 @ Вытяжка / i_light_plholder # 33343B / элемент> # 8033343B # 28292e # F2F2F3 @ Вытяжка / i_dark_pholder
Вот фактические стили для данного действия:
# F4F4F6 # 33343B
Вам необходимо указать одну из этих тем в манифесте для активности приложения, в данном случае это FeedActivity.
Стилизация видов
Вот пример стилизации ваших представлений — в данном примере это ошибка перенаправления «Страница не найдена».
Как включить динамическое переключение тем
Лучший и наиболее эффективный способ включить динамическое переключение тем — загрузить значение SharedPreference, которое используется для сохранения настройки в экземпляре приложения, с использованием шаблона Singleton, что означает, что нам не придется делать это в начале каждого действия.
публичный класс приложение расширяет приложение { 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 (логическое значение isNightModeEnabled) { this.isNightModeEnabled = isNightModeEnabled; } }
Поскольку этот экземпляр запускается раньше всего, он позволяет вам вызывать isNightModeEnabled () Boolean всякий раз, когда вы хотите, в любой активности, принадлежащей приложению, после его открытия.
открытый финальный класс FeedActivity расширяет AppCompatActivity { приватная конечная статическая строка TAG = «FeedActivity»; @Override protected void onCreate (BundlevedInstanceState) { if (MyApplication.getInstance (). isNightModeEnabled ()) { setTheme (R.style.FeedActivityThemeDark); } super.onCreate (savedInstanceState); 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 protected void onCreate (BundlevedInstanceState) { if (AppCompatDelegate.getDefaultNightMode () == AppCompatDelegate.MODE_NIGHT_YES) { setTheme (R.style.FeedActivityThemeDark); } super.onCreate (savedInstanceState); setContentView (R.layout.activity_feed); } }
Так и должно быть — вы можете продолжать настраивать и настраивать значения по своему вкусу, но это руководство является отличным введением, с которого вы можете начать с включения нативной темной темы в ваше приложение для Android.