为什么ContextThemeWrapper现在被限制在Support Library组中?

26

我开始使用ContextThemeWrapper动态地应用样式到一个ImageButton上;参考了我的另一个问题的答案以及其他类似的问题的答案

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

但最近在ContextThemeWrapper构造函数上出现了一个lint错误,指出:

ContextThemeWrapper只能从同一库组(groupId=com.android.support)中调用

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

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


我遇到的唯一相似问题是有关一个(现已修复)bug的问题;它导致在AppCompatActivity的子类的onCreate方法上显示此lint错误。我认为这种情况不是一个bug,而是一个故意的限制;我希望知道背后的原因。

需要注意的是,就目前而言,这个限制实际上似乎对使用ContextThemeWrapper的代码没有影响。它编译并正常运行,并且按照我期望的方式工作。

1个回答

59

android.view.ContextThemeWrapper并不等同于android.support.v7.view.ContextThemeWrapper

支持库版本被注释为@RestrictTo(LIBRARY_GROUP),同时也被标记为@hide——它并不是一个公共API。

第一个版本是公共的。


我在import android.support.v7.view.ViewPropertyAnimatorCompatSet中遇到了同样的问题,但是我找不到替代方案,有什么想法吗? - TheHebrewHammer
@TheHebrewHammer android.support.v4.view.ViewPropertyAnimatorCompat - ephemient
5
只需要将' support.v7.view '的导入改成' android.view ',有时解决方案比你想象的要简单得多:) 哈哈 - Shirish Herwade
我不得不将它从android.view.ContextThemeWrapper更改为androidx.appcompat.view.ContextThemeWrapper,以消除有关低API级别不可用的警告。警告是**调用需要API级别23(当前最小值为16):'new android.view.ContextThemeWrapper'**。 - gregn3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接