为什么ContextThemeWrapper现在仅限于支持库组?

时间:2017-03-15 15:26:55

标签: android syntax-error android-support-library android-context android-lint

我开始使用ContextThemeWrapper动态地将样式应用于ImageButton;基于an answer我的另一个问题,以及其他similar questions的答案。

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

但是最近一个lint错误开始出现在ContextThemeWrapper构造函数上:

  

ContextThemeWrapper只能在同一个库中调用   group(groupId = com.android.support)

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

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

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

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

1 个答案:

答案 0 :(得分:57)

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

支持库1带有注释@RestrictTo(LIBRARY_GROUP),还有@hide - 它不是公共API。

第一个是公开的。