[关闭]
@natsumi 2017-12-28T06:24:47.000000Z 字数 12004 阅读 1334

Support Library

Android


support library revisions
https://developer.android.google.cn/topic/libraries/support-library/revisions.html#27-0-1

support library
https://developer.android.google.cn/topic/libraries/support-library/index.html

About Support Library

随着 Android SDK 的升级,高版本的sdk中会增加很多新的 API,比如 ActionBar、Fragment、RecyclerView 等,如果在低版本的设备上需要使用高版本新增的API怎么办?
不可能去更新用户设备的 Android 版本,所以将新增的API以依赖包的形式集成应用程序中。

提供这种后向兼容的依赖包就是 Support Library

Support Library 的命名
有很多support包的命名中包含“v#”,比如 support-v4 和 support-v7,这里 v4 和 v7 表示支持的最低 API level。但是 26.0.0 以上版本的所有 Support Library 的最低 API level 是 14。

Packages

v4 Support Libraries

v7 Support Libraries

v8 Support Library

添加了对 RenderScript 计算框架的支持
关于 RenderScript : http://www.jianshu.com/p/168342c85806

v13 Support Library

ActivityCompat
FragmentCompat
FragmentPagerAdapter
FragmentStatePagerAdapter
FragmentTabHost

针对于平板兼容开发的,由于平板屏幕较大,因此该系列增强的对Fragment效果的支持,使得Fragment能够在平板的各个版中兼容(一般手机开发者不用该包)

v14 Preference Support Library

MultiSelectListPreference & PreferenceFragment

others

for TV & Wear

version 27.0.0

diff
https://developer.android.google.cn/sdk/support_api_diff/27.0.0/changes.html

Fragment Transition

Fragment可以用support library中的Transition进行切换,包括共享元素切换

此处输入图片的描述

ContentPager

Android 8.0新功能
android.support.content.ContentPager通过ContentProvider对分页内容的展现提供支持。避免UI线程中"cursor window swaps"

Autofill

com.android.support:appcompat-v7:27.0.0
ViewCompat增加了对自动填写方法的封装(api26 以下的实现为空)

关于自动填写

官方的demo
https://github.com/googlesamples/android-AutofillFramework

Autofill Framework(自动填写) 用法详解
https://juejin.im/entry/594386c55c497d006bd0af56

PermissionCompatDelegate

com.android.support:appcompat-v7:27.0.0
Instant Apps支持运行时权限for Android 5.0

Android Instant App 在运行 Android 6.0(API 级别 23)或更高版本的设备上可用,此外还计划为 Android 5.0(API 级别 21)添加额外的支持。

customtabs优化

com.android.support:customtabs:27.0.0

TrustedWebUtils 工具类 launchAsTrustedWebActivity
定义App和origin URI之间的关系

  1. RELATION_HANDLE_ALL_URLS
  2. RELATION_USE_AS_ORIGIN

页面的内容是由App控制的,和Android组件交互——WebView
打开外部的网站——Chrome Custom Tabs

Chrome custom tabs给了app更多控制web体验的机会,在不借助于WebView的情况下,让本地内容与web内容之间的切换更平滑流畅。
Chrome custom tabs允许一个app自定义Chrome 的外观,app可以改变类似如下的东西:

此处输入图片的描述

需要先检查是否安装Chrome,以及Chrome版本是否支持Chrome custom tabs

提升体验-支持Chrome Custom Tabs
http://www.jianshu.com/p/f952d9c71d91

Wear

com.android.support:wear:27.0.0

Ambient mode

https://developer.android.google.cn/reference/android/support/wear/ambient/AmbientMode.html

AmbientMode 是 Fragment 的派生类。用 AmbientMode 作为一个 headless Fragment 来为 Activity 提供 ambient 支持.

  1. AmbientMode.AmbientController attachAmbientSupport (T activity)

AmbientMode 支持所有的 Activity 不仅是 WearableActivity
Android Wear的ambient mode简化
兼容Architecture Components

关于Headless Fragment
http://blog.csdn.net/u010276653/article/details/45272113
Fragment应该分为UI Fragment和Headless Fragment。
前者是指一般的定义了UI的Fragment,后者则是无UI的Fragment,即在onCreateView()中返回的是null。将与UI处理无关的异步任务都可以放到后者中,而且一般地都会在onCreate()中加上setRetainInstance(true),故而可以在横竖屏切换时不被重新创建和重复执行异步任务。
这样做了之后,便可以不用管UI Fragment的重新创建与否了,因为数据和异步任务都在无UI的Fragment中,再通过Activity 的 FragmentManager 交互即可。
只需记得在Headless Fragment销毁时将持有的数据清空、停止异步任务

关于Architecture Components

此处输入图片的描述

RoundedDrawable

RoundedDrawable在 26.1.0 版本加入
27.0.0版本新增:API level 24 以上可以在xml中inflate

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <android.support.wear.widget.RoundedDrawable
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. xmlns:app="http://schemas.android.com/apk/res-auto"
  5. android:src="drawable"
  6. app:backgroundColor="color"
  7. app:radius="dimension"
  8. app:clipEnabled="boolean" />

TV

android.support.v17.leanback

“Leanback” 就是靠着看的意思。是指以放松的姿势倒在沙发上。
谷歌推出 android.support.v17.leanback 软件包提供的 API 支持在电视设备上构建用户界面。它为电视应用提供了一些重要的小部件。这个库只支持到api 17以上的版本,也就是andorid 4.2,而一些效果也只是在api 21以上支持。

remove & migrate

android.support.v7.NotificationCompat (use v4 NotificationCompat instead), KeyEventCompat, ParallelExecutorCompat, and SearchViewCompat remove

Migrated wear manifest metadata constants are all now available via android.support.wear.utils.MetadataConstants.

version 26.1.0

在Support Library中加入了Architecture Components中的Lifecycles

Fragment 和 FragmentActivity (AppCompatActivity 的基类) 实现了 Architecture Components 的 LifecycleOwner 接口。

version 26.0.0

RecyclerView支持快速滑动

  1. <android.support.v7.widget.RecyclerView
  2. android:id="@+id/recyclerView"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. app:fastScrollEnabled="true"
  6. app:fastScrollHorizontalThumbDrawable="@drawable/thumb_drawable"
  7. app:fastScrollHorizontalTrackDrawable="@drawable/line_drawable"
  8. app:fastScrollVerticalThumbDrawable="@drawable/thumb_drawable"
  9. app:fastScrollVerticalTrackDrawable="@drawable/line_drawable">
  10. </android.support.v7.widget.RecyclerView>

fastScrollEnabled:是否启用快速滚动
如果设置为启用,还需要设置下面的四个属性。

RecyclerView 实现快速滚动
http://www.jianshu.com/p/feddf88aff67

此处输入图片的描述

好多东西 deprecated

  • 用 NotificationCompat.Builder 替代 v7.app.NotificationCompat.Builder。 原来依赖于v7 AppCompat Builder的功能被合入v4 Compat Builder。
  • DecoratedCustomViewStyle 移入 android.support.v4.app package.
  • MediaStyle 和 DecoratedMediaCustomViewStyle 移入 android.support.v4.media.app 的 media-compat 库

Wear

android.support.wear.widget
新增Wear UI Library,包含许多适用于 Wear 应用的首选界面组件。

26.0.0 Beta 2

JobIntentService

帮助开发者以符合 Android O 后台执行限制的方式安排task的执行.

使用上和 IntentService 差不多。当运行在 Android O 以上的版本时,任务(work)会作为一个 job 通过 JobScheduler 的 enqueue 方法分发

Android O 后台执行限制:

  • 后台服务限制:处于空闲状态时,应用可以使用的后台服务存在限制。 这些限制不适用于前台服务,因为前台服务更容易引起用户注意。
  • 广播限制:除了有限的例外情况,应用无法使用清单注册隐式广播。 它们仍然可以在运行时注册这些广播,并且可以使用清单注册专门针对它们的显式广播。

注:默认情况下,这些限制仅适用于针对 O 的应用。 不过,用户可以从 Settings 为任意应用启用这些限制,即使应用并不是以 O 为目标平台。

在大多数情况下,应用都可以使用 JobScheduler 作业克服这些限制。 这种方式让应用安排为在未活跃运行时执行工作,不过仍能够使系统可以在不影响用户体验的情况下安排这些作业。

Android 8.0 提供针对 JobScheduler 的多个改进,可以轻松取代服务和广播接收器

26.0.0 Beta 1

API changes

findViewById()

返回<T extends View>
需注意由此引起的一些隐含的问题。

setSupportMediaController

  1. FragmentActivity.setSupportMediaController()
  2. FragmentActivity.getSupportMediaController()

👆移除了,用👇

  1. MediaControllerCompat.setMediaController()
  2. MediaControllerCompat.getMediaController()

BottomNavigationView

当 item 已经被选中时 BottomNavigationView 将调用 onNavigationItemReselected() 而不是 onNavigationItemSelected()

Fragment & FragmentManager isStateSaved()

当Fragment | FragmentManager的状态被其Host(FragmentManager | Activity)保存下来以后返回true。在这个方法返回ture后不能更改fragment的状态。例如Fragment的setArguments(Bundle)方法将失败,FragmentManager的各种popBackStack方法、以及使用commit()实现的FragmentTransaction都会失败。(修改状态应使用commitAllowingStateLoss())

AnimatedVectorDrawableCompat

支持动作路径。按照animator XML中定义的一个路径android:pathData,变化两个属性。

对于API 24以上,这个类就是AnimatedVectorDrawable的封装。
更老的API版本,用 ObjectAnimatorAnimatorSet,通过对VectorDrawableCompat的属性变化创造动画的Drawable。

Physics-based animation

此处输入图片的描述
此处输入图片的描述

Preferences Data Store

可以继承PreferenceDataStore接口自定义 preferences 存储替代SharedPreference。如果App需要将 preferences 存储到一个本地数据库、云端等。

Font support in XML:

font 资源文件(ttf/otf)
此处输入图片的描述

font-family XML

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <font-family xmlns:android="http://schemas.android.com/apk/res/android">
  3. <font
  4. android:fontStyle="normal"
  5. android:fontWeight="400"
  6. android:font="@font/lobster_regular" />
  7. <font
  8. android:fontStyle="italic"
  9. android:fontWeight="400"
  10. android:font="@font/lobster_italic" />
  11. </font-family>

使用support library 要加上app:attribute

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <font-family xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto">
  4. <font android:fontStyle="normal" android:fontWeight="400" android:font="@font/myfont-Regular"
  5. app:fontStyle="normal" app:fontWeight="400" app:font="@font/myfont-Regular"/>
  6. <font android:fontStyle="italic" android:fontWeight="400" android:font="@font/myfont-Italic"
  7. app:fontStyle="italic" app:fontWeight="400" app:font="@font/myfont-Italic" />
  8. </font-family>

ResourcesCompat.getFont
同步 & 异步

  1. Typeface typeface = ResourcesCompat.getFont(context, R.font.myfont);
  2. getFont(context, R.font.myfont, fontCallback, Handler)

资源加载成功后可以 TextView.setTypeface()

对于 API level 23 以前的版本,会忽略textStyle属性。

  1. public static final int NORMAL = 0;
  2. public static final int BOLD = 1;
  3. public static final int ITALIC = 2;
  4. public static final int BOLD_ITALIC = 3;

包含多个字体(一个font family)的 font 资源文件使用 ResourcesCompat.getFont时,将会加载距离最接近常规粗度的一种字体。

Autosizing TextView:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <TextView
  3. android:layout_width="match_parent"
  4. android:layout_height="200dp"
  5. app:autoSizeTextType="uniform"
  6. app:autoSizeMinTextSize="12sp"
  7. app:autoSizeMaxTextSize="100sp"
  8. app:autoSizeStepGranularity="2sp" />

或者通过 TextViewCompat 的 setAutoSizeXXX 系列方法

Downloadable fonts:

API 14 以上
Downloadable Fonts only works on Google Play Services v11+

此处输入图片的描述

  1. FontRequest request = new FontRequest("com.example.fontprovider.authority",
  2. "com.example.fontprovider", "my font", certs);
  3. FontsContractCompat.FontRequestCallback callback =
  4. new FontsContractCompat.FontRequestCallback() {
  5. @Override
  6. public void onTypefaceRetrieved(Typeface typeface) {
  7. // Your code to use the font goes here
  8. ...
  9. }
  10. @Override
  11. public void onTypefaceRequestFailed(int reason) {
  12. // Your code to deal with the failure goes here
  13. ...
  14. }
  15. };
  16. FontsContractCompat.requestFonts(context, request, callback , handler);

Emoji compatibility library:

com.android.support:support-emoji

API 18 以下 什么都不做~~
EmojiCompat 处理给定的 CharSequence 添加 EmojiSpan 
EmojiTextView 和其他的一些 UI 组件可以展示表情
FontRequestEmojiCompatConfig 可以从 font provider 请求表情字体(only works on Google Play Services v11+)
BundledEmojiCompatConfig 通过 AssetManager 和 bundled resources 获取字体

TV

com.android.support:leanback-v17
回放控制 seek support
展示缩略图方便选择回放位置

Leanback playback controls with seek support:
New PlaybackTransportRowPresenter that renders playback controls with a SeekBar.
New PlaybackTransportControlGlue that works with PlaybackTransportRowPresenter and supports seek.
New base class PlaybackSeekDataProvider for app to provide seek thumbnails to PlaybackTransportControlGlue.

26.0.0 Alpha 1

API changes

support-percent deprecated

support-fragment 不再依赖 upport-media-compat module.

IME_FLAG_NO_PERSONALIZED_LEARNING: IMEs(Input method editors) 监听这个标志,判断App是否处于隐私模式,禁用学习功能。

more diff https://developer.android.google.cn/sdk/support_api_diff/26.0.0-alpha1/changes.html

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注