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

Для разработчиков создание приложения 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.

Ссылка на основную публикацию
Adblock
detector