为什么 ContextThemeWrapper 现在仅限于 Support Library 组?

Why is ContextThemeWrapper now restricted to the Support Library group?

我开始使用 ContextThemeWrapper 将样式动态应用到 ImageButton;基于 to another question of mine, and answers to other similar questions.

ContextThemeWrapper wrapper = new ContextThemeWrapper(getContext(), mStyleRes);
mImageButton = new AppCompatImageButton(wrapper, null, 0);

但最近 ContextThemeWrapper 构造函数中开始出现 lint 错误,指出:

ContextThemeWrapper can only be called from within the same library group (groupId=com.android.support)

我注意到标有 @RestrictTo(LIBRARY_GROUP) 注释的 class 导致出现 lint 错误。但我找不到任何关于 为什么 它仅限于 com.android.support 图书馆组的信息。

据我所知,这是以编程方式将样式、主题或主题叠加应用到 View 的唯一方法;除了将默认样式属性设置为构造函数中的第三个参数之外。所以我想知道为什么它的使用会受到限制;在支持库之外使用 class 有什么问题吗?会不会有我不知道的副作用?


我遇到的唯一 是关于一个(现已修复)错误;这导致此 lint 错误显示在 AppCompatActivity 的子 class 的 onCreate 方法中。我不认为这种情况是错误,而是故意限制;我想知道背后的原因。

我应该注意;这个限制(截至目前)实际上似乎对使用 ContextThemeWrapper 的代码没有影响。它编译和运行良好,并且按我预期的那样工作。

android.view.ContextThemeWrapper != android.support.v7.view.ContextThemeWrapper.

第一个支持库被注释为 @RestrictTo(LIBRARY_GROUP),还有 @hide - 它并不意味着 public API。

第一个是public。