Библиотека Android Support Library 23.2 — поддержка векторных изображений, новая тема DayNight и новые элементы материального дизайна

Библиотека Android Support Library 23.2 — поддержка векторных изображений, новая тема DayNight и новые элементы материального дизайна

Когда речь идет о библиотеке поддержки Android, важно понимать, что это не одна библиотека, а целый набор библиотек которые стремятся предоставить обратную совместимость версий Android API, а так же предлагают уникальные возможности, не требуя наличия последней версии платформы андроид. Версия 23,2 добавляет несколько новых библиотек поддержки, а также новые возможности для многих из существующих библиотек.

Поддержка векторной графики и векторной анимации в android

Векторная графика позволяет заменить несколько png ресурсов одним векторным изображением, определенный в XML. В то время как ранее поддерживаемая только на Lollipop и выше, векторная графика и векторная анимация теперь доступны через две новых библиотеки поддержки support-vector-drawable and animated-vector-drawable , соответственно.

В Android Studio 1.4 введена ограниченная поддержка векторных изображений. Чтобы отключить эту функцию (и получить истинное преимущество и космическую экономию с этой библиотекой поддержки), вам нужно добавить vectorDrawables.useSupportLibrary = true в ваш файл build.gradle :

Вы заметите, что этот новый атрибут существует только в версии 2.0 плагина Gradle. Если вы используете Gradle 1.5, пропишите такое:

Вы будете иметь возможность использовать VectorDrawableCompat на API 7 и AnimatedVectorDrawableCompat на всех устройствах API 11 и выше. Так как drawables загружаются в Android, не в каждом месте, которое принимает id графического ресурса (например, в файле XML) будет поддерживаться загрузка векторных ресурсов. К счастью AppCompat добавила ряд функций, чтобы облегчить использование векторной графики.

Во-первых при использовании AppCompat с ImageView (или подклассов, таких как ImageButton и FloatingActionButton ), вы сможете использовать новый атрибут app:srcCompat для ссылки на векторный ресурс (а также любые другие изображения, доступные для android:src ):

И если вы изменяете drawables во время выполнения, вы сможете использовать тот же метод setImageResource () как и прежде — без изменений. С помощью AppCompat и app:srcCompat это наиболее безопасный метод интеграции векторных изображений в ваше приложение.

Вы не сможете напрямую ссылаться на векторные ресурсы app:srcCompat в версиях до Android 5.0 Lollipop. Однако, AppCompat поддерживает загрузку векторных изображений, когда они указаны в другом контейнере, таком как StateListDrawable , InsetDrawable , LayerDrawable , LevelListDrawable , и RotateDrawable . С помощью этой абстракции, можно использовать векторные ресурсы в случаях, например как атрибут TextView android:drawableLeft , который обычно не поддерживает векторную графику.

Новая тема оформления AppCompat DayNight

Хотя возможность использования векторной графики в вашем приложении — уже большие изменения AppCompat, есть новая тема, которую добавляет AppCompat в этом выпуске: Theme.AppCompat.DayNight.

До API 14, тема DayNight и ее потомки DayNight.NoActionBar, DayNight.DarkActionBar, DayNight.Dialog, и т.п. имеют их облегченные эквиваленты. Но на устройствах API 14 и выше, эта тема позволяет приложениям легко поддерживать оба варианта Light и Dark theme, эффективно переключаясь со светлой на темной тему на основе определения времени суток.

По умолчанию, определение ночи будет соответствовать значению системной переменной (из UiModeManager.getNightMode() ), но это значение можно переопределить с помощью методов в AppCompatDelegate . Вы сможете установить настройки по умолчанию для всего приложения (до перезапуска процесса) с помощью статического метода AppCompatDelegate.setDefaultNightMode() или получить AppCompatDelegate через getDelegate() и использовать setLocalNightMode() чтобы изменить только текущий Activity или Dialog.

При использовании AppCompatDelegate.MODE_NIGHT_AUTO, время суток и ваше последнее известное местоположение (если ваше приложение имеет разрешение location permissions) используются для автоматического переключения между днем и ночью, тогда как MODE_NIGHT_NO и MODE_NIGHT_YES принудительно определяет никогда или всегда использовать темную тему, соответственно.

Очень важно тщательно протестировать приложение при использовании тем DayNight, так как жестко определенные цвета могут сделать нечитаемыми текст и значки. Если вы используете стандартные стили TextAppearance.AppCompat для вашего текста или берете из вашей темы цвета, такие как android:textColorPrimary , они автоматически обновятся у вас.

Однако если вы хотите настроить любые ресурсы специально для ночного режима, используйте соответствующие квалификаторы для каталога, AppCompat использует night resource qualifier folder, что дает возможность настроить каждый ресурс, который вам может понадобиться. Пожалуйста рассмотрите использование стандартных цветов или тонирования в AppCompat, чтобы сделать поддержку этого режима намного проще.

Подробнее о том, как настроить DayNight тему в приложении андроид Новый компонент материального дизайна: Bottom Sheets

Библиотека Design Support Library обеспечивает реализацию многих моделей материального дизайна. Этот выпуск позволяет разработчикам легко добавлять bottom sheets для их приложения.

Путем присоединения BottomSheetBehavior к дочерним View из CoordinatorLayout (т.е., добавив app:layout_behavior=»android.support.design.widget.BottomSheetBehavior» ), вы автоматически получите touch detection для перехода между пятью состояниями:

  • STATE_COLLAPSED: Этот свернутое состояние по умолчанию и показывает только часть макета внизу. Высота может управляться с помощью атрибута app:behavior_peekHeight (по умолчанию 0)
  • STATE_DRAGGING: промежуточное состояние, в то время как пользователь непосредственно перетаскивает компонент Bottom Sheets вверх или вниз
  • STATE_SETTLING: Это короткий момент между тем, когда View высвобождается и устанавливается в конечное положение
  • STATE_EXPANDED: компонент Bottom Sheets в полностью развернутом состоянии, где он весь виден (если его высота меньше, чем содержащий его CoordinatorLayout) или заполнил весь CoordinatorLayout
  • STATE_HIDDEN: по умолчанию отключено (включается атрибутом app:behavior_hideable ), его включение позволяет пользователям полностью скрыть компонент Bottom Sheets быстрым свайпом вниз

Имейте в виду, что скроллинг контейнеров в Bottom Sheets возможен при поддержке ними вложенного скроллинга (например, NestedScrollView , RecyclerView , или ListView/ScrollView в API 21+).

Если вы хотите получать обратные вызовы изменения состояния, вы можете добавить BottomSheetCallback:

📎📎📎📎📎📎📎📎📎📎