Обзор Support Library Android SDK v26

    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).

    Поддержка шрифтов в 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 года.
    • +18
    • 3,6k
    • 5
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 5
    • 0
      Другими словами, убедитесь, что тег TargetFramework установлен на 8.0 (API 26). В таком случае приложения скомпилируется при помощи последней версии Android Support Library(V26).

      Напомните, пожалуйста, какая версия Android потребуется потом для работы с таким порогом? Про Kit-Kat можно будет забыть?

      p.s.
      Я старый брюзга, поэтому не могу удержаться: публиковать текстовый код в jpg-е — это как снимать происходящее на видео прямо с экрана. Два котла для таких наверняка объединены в один ;)
      • +1
        targetSdkVersion это не minSdkVersion, ну и последние версии сейчас 27.х (8.1)
        • 0
          Это ж Support Library. Для работы минимум 14 или 15 версия SDK нужна.
        • 0
          промахнулся
          • 0
            Думал, что Wuala вернулась, ан нет.
            Не серчайте, что не по теме.
            Уж больно лого ваш знаком.

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое