26 версия Android SDK принесла новые возможности в наши Андроид приложения, включая шрифты как ресурсы, загружаемые шрифты, поддержка эмоджи, автоматические размеры TextView, управляемые физикой анимации через Spring and Fling, обратная совместимость для векторных анимаций, и уменьшения библиотеки при помощи повышения минимальной версии sdk до 14.
Если вы не знакомы с Android Support Library, то знайте, что вам нужно компилировать приложение на том же уровне Android API, что и последняя версия Android Support Library. Другими словами, убедитесь, что тег TargetFramework установлен на 8.0 (API 26). В таком случае приложения скомпилируется при помощи последней версии Android Support Library(V26).
Теперь вы можете помещать шрифты в новую папку ресурсов шрифта font. Используйте Resources.GetFont или ResourcesCompat.GetFont, чтобы скачать ресурсы шрифта в ваше приложение.
Пример: определение шрифта в XML в папке Resourcesfont:
Использование ресурса шрифта в View:
Есть новый класс FontsContractCompat, который позволит вам запрашивать шрифты у провайдера шрифтов вместо пакетирования их внутри вашего приложения. Вы можете использовать провайдер шрифтов из Google Fonts (800+шрифтов).
Чтобы использовать его, сначала создайте FontRequest:
Во-вторых, вам нужно зарегистрировать FontRequestCallback, который внедряет OnTypefaceRetrieved(Android.Graphics.Typeface typeface) и OnTypefaceRequestFailed(int reason). Мы создали один, который вы можете использовать, в этом примере:
Наконец, вам нужно запросить шрифт:
FontsContractCompat.RequestFont(this, request, callback, GetHandlerThreadHandler());
Вы можете также запросить шрифт непосредственно в XML:
Вспомогательная библиотека EmojiCompat позволит вашим устройствам пользоваться самыми новыми эмодзи, не требуя обновления Android OS. Это помогает избежать изображения надоевших пустых квадратиков (?)!
EmojiCompat имеет две основных библиотеки: скачиваемую или пакетную.
Как было отмечено выше в разделе «Скачиваемые шрифты» этого поста, сначала вам нужно сформировать FontRequest, чтобы создать FontRequestEmojiCompatConfig.
Пакетная библиотека делает жизнь немного легче примерно за 7 Мбит пакетного шрифта. Все, что вам нужно, это создать BundledEmojiCompatConfig:
Библиотека EmojiCompat обеспечивает нас тремя основными элементами для отображения эмодзи:
EmojiTextView, EmojiEditTExt, и EmojiButton
Ваш TextView теперь автоматически увеличивает размер текста, когда увеличивается контейнер. Есть три способа, которыми вы можете задать автоматический выбор размера TextView, и они объяснены ниже.
Начните с описания android:autoSizeTextType как uniform.
Вы можете также определить диапазон между минимальным и максимальным размером текста для вашего TextView. Он может также увеличиваться пошагово согласно заданной вами степени разбивки.
Наконец, вы можете указать все значения, которые TextView может использовать при автоматическом выборе размера. Вы можете указать ресурс массива ранее заданных размеров:
Теперь вам нужно только указать значение android:autoSizePresetSizes для массива, который мы уже создали:
Теперь вы можете использовать анимацию на основе скорости вместо анимации на основе длительности. Такая анимация выглядит более натурально, с движениями, которые имитируют резкое движение или пружину.
Чтобы создать нашу первую динамическую анимацию, создайте новый объект SpringAnimation, используя View, ViewProperty и finalPosition.
SpringAnimation animX = new SpringAnimation(box, DynamicAnimation.TranslationX, 0);
Есть две основных концепции, которые вы можете задать для пружины: Stiffness и DampingRatio.
Stiffness определяет, как быстро пружина возвращается в исходное состояние, а DampingRatio определяет, насколько пружина упругая.
Затем вы можете задать вашу скорость StartVelocity и запустить(Start) анимацию!
Если вы не знаете о AnimatedVectorDrawableCompat, то это красивая стильная библиотека для переходов между путями и интерполяции вдоль пути с целью создания ошеломляющих анимаций, трансформации логотипов и многого другого. Все они теперь привязаны к API 14, который позволяет этим красивым анимационным векторам работать с более старыми устройствами.
Вы можете создать ваши собственные красивые анимации в векторной графике с помощью XML, создав элемент animated-vector и приложив pathInterpolators к определенному objectAnimator. Если вы не лучший аниматор на свете, вы можете начать здесь с помощью инструмента Алекса Локвуда:
Есть много хороших характеристик, которые Android предоставляет в пределах своих вспомогательных библиотек, которые вы можете использовать при разработке приложений на Xamarin. Эти характеристики обычно совместимы с предыдущими версиями minSdkVersion, которые определяются вспомогательной библиотекой. Теперь у вас есть шанс исследовать, что вспомогательные библиотеки могут дать вашим приложениям!
Источник: статья Джона Дугласа «Android Support Library v26 Overview» от 2 октября 2017 года.
Если вы не знакомы с Android Support Library, то знайте, что вам нужно компилировать приложение на том же уровне Android API, что и последняя версия Android Support Library. Другими словами, убедитесь, что тег TargetFramework установлен на 8.0 (API 26). В таком случае приложения скомпилируется при помощи последней версии Android Support Library(V26).
Поддержка шрифтов в XML
Теперь вы можете помещать шрифты в новую папку ресурсов шрифта font. Используйте Resources.GetFont или ResourcesCompat.GetFont, чтобы скачать ресурсы шрифта в ваше приложение.
Пример: определение шрифта в XML в папке Resourcesfont:
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android">
<font
android:fontStyle="normal"
android:fontWeight="400"
android:font="@font/lobster_regular" />
<font
android:fontStyle="italic"
android:fontWeight="400"
android:font="@font/lobster_italic" />
</font-family>
Использование ресурса шрифта в View:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/lobster"/>
Скачиваемые шрифты
Есть новый класс FontsContractCompat, который позволит вам запрашивать шрифты у провайдера шрифтов вместо пакетирования их внутри вашего приложения. Вы можете использовать провайдер шрифтов из Google Fonts (800+шрифтов).
Чтобы использовать его, сначала создайте FontRequest:
FontRequest request = new FontRequest(
"com.google.android.gms.fonts",
"com.google.android.gms",
query,
Resource.Array.com_google_android_gms_fonts_certs);
Во-вторых, вам нужно зарегистрировать FontRequestCallback, который внедряет OnTypefaceRetrieved(Android.Graphics.Typeface typeface) и OnTypefaceRequestFailed(int reason). Мы создали один, который вы можете использовать, в этом примере:
FontsContractCompat.FontRequestCallback callback = new FontRequestCallbackImpl
{
mActivity = this,
mDownloadableFontTextView = DownloadableFontTextView,
mRequestDownloadButton = RequestDownloadButton,
mProgressBar = progressBar
};
Наконец, вам нужно запросить шрифт:
FontsContractCompat.RequestFont(this, request, callback, GetHandlerThreadHandler());
Вы можете также запросить шрифт непосредственно в XML:
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
android:fontProviderAuthority="com.google.android.gms.fonts"
android:fontProviderPackage="com.google.android.gms"
android:fontProviderQuery="Lobster Two"
android:fontProviderCerts="@array/com_google_android_gms_fonts_certs" />
Совместимость с эмодзи
Вспомогательная библиотека EmojiCompat позволит вашим устройствам пользоваться самыми новыми эмодзи, не требуя обновления Android OS. Это помогает избежать изображения надоевших пустых квадратиков (?)!
EmojiCompat имеет две основных библиотеки: скачиваемую или пакетную.
Скачиваемая
Как было отмечено выше в разделе «Скачиваемые шрифты» этого поста, сначала вам нужно сформировать FontRequest, чтобы создать FontRequestEmojiCompatConfig.
EmojiCompat.Config config;
var fontRequest = new FontRequest(
"com.google.android.gms.fonts",
"com.google.android.gms",
"Noto Color Emoji Compat",
Resource.Array.com_google_android_gms_fonts_certs);
config = new FontRequestEmojiCompatConfig(this, fontRequest)
.SetReplaceAll(true)
.RegisterInitCallback(new InitCallbackImpl());
Пакетная
Пакетная библиотека делает жизнь немного легче примерно за 7 Мбит пакетного шрифта. Все, что вам нужно, это создать BundledEmojiCompatConfig:
EmojiCompat.Config config;
config = new BundledEmojiCompatConfig(this);
Эмодзи виджеты
Библиотека EmojiCompat обеспечивает нас тремя основными элементами для отображения эмодзи:
EmojiTextView, EmojiEditTExt, и EmojiButton
Автоматический выбор размера TextView
Ваш TextView теперь автоматически увеличивает размер текста, когда увеличивается контейнер. Есть три способа, которыми вы можете задать автоматический выбор размера TextView, и они объяснены ниже.
Начните с описания android:autoSizeTextType как uniform.
<TextView
android:layout_width="match_parent"
android:layout_height="200dp"
app:autoSizeTextType="uniform" />
Степень разбивки
Вы можете также определить диапазон между минимальным и максимальным размером текста для вашего TextView. Он может также увеличиваться пошагово согласно заданной вами степени разбивки.
<TextView
android:layout_width="match_parent"
android:layout_height="200dp"
app:autoSizeTextType="uniform"
app:autoSizeMinTextSize="12sp"
app:autoSizeMaxTextSize="100sp"
app:autoSizeStepGranularity="2sp" />
Задание размеров
Наконец, вы можете указать все значения, которые TextView может использовать при автоматическом выборе размера. Вы можете указать ресурс массива ранее заданных размеров:
<resources>
<array name="autosize_text_sizes">
<item>10sp</item>
<item>12sp</item>
<item>20sp</item>
<item>40sp</item>
<item>100sp</item>
</array>
</resources>
Теперь вам нужно только указать значение android:autoSizePresetSizes для массива, который мы уже создали:
<TextView
android:layout_width="match_parent"
android:layout_height="200dp"
app:autoSizeTextType="uniform"
app:autoSizePresetSizes="@array/autosize_text_sizes" />
Динамическая анимация
Теперь вы можете использовать анимацию на основе скорости вместо анимации на основе длительности. Такая анимация выглядит более натурально, с движениями, которые имитируют резкое движение или пружину.
Чтобы создать нашу первую динамическую анимацию, создайте новый объект SpringAnimation, используя View, ViewProperty и finalPosition.
SpringAnimation animX = new SpringAnimation(box, DynamicAnimation.TranslationX, 0);
Есть две основных концепции, которые вы можете задать для пружины: Stiffness и DampingRatio.
Stiffness определяет, как быстро пружина возвращается в исходное состояние, а DampingRatio определяет, насколько пружина упругая.
animX.Spring.SetStiffness(Stiffness);
animX.Spring.SetDampingRatio(Damping);
Затем вы можете задать вашу скорость StartVelocity и запустить(Start) анимацию!
animX.SetStartVelocity(velocityTracker.XVelocity);
animX.Start();
AnimatedVectorDrawableCompat (бонус)
Если вы не знаете о AnimatedVectorDrawableCompat, то это красивая стильная библиотека для переходов между путями и интерполяции вдоль пути с целью создания ошеломляющих анимаций, трансформации логотипов и многого другого. Все они теперь привязаны к API 14, который позволяет этим красивым анимационным векторам работать с более старыми устройствами.
Вы можете создать ваши собственные красивые анимации в векторной графике с помощью XML, создав элемент animated-vector и приложив pathInterpolators к определенному objectAnimator. Если вы не лучший аниматор на свете, вы можете начать здесь с помощью инструмента Алекса Локвуда:
Выводы
Есть много хороших характеристик, которые Android предоставляет в пределах своих вспомогательных библиотек, которые вы можете использовать при разработке приложений на Xamarin. Эти характеристики обычно совместимы с предыдущими версиями minSdkVersion, которые определяются вспомогательной библиотекой. Теперь у вас есть шанс исследовать, что вспомогательные библиотеки могут дать вашим приложениям!
Источник: статья Джона Дугласа «Android Support Library v26 Overview» от 2 октября 2017 года.
uploadfor
Напомните, пожалуйста, какая версия Android потребуется потом для работы с таким порогом? Про Kit-Kat можно будет забыть?
p.s.
Я старый брюзга, поэтому не могу удержаться: публиковать текстовый код в jpg-е — это как снимать происходящее на видео прямо с экрана. Два котла для таких наверняка объединены в один ;)
wrewolf
targetSdkVersion это не minSdkVersion, ну и последние версии сейчас 27.х (8.1)
Suvitruf
Это ж Support Library. Для работы минимум 14 или 15 версия SDK нужна.