support studio not nonnull error developers annotation android syntax-error android-support-library android-context android-lint

android - studio - ¿Por qué ContextThemeWrapper ahora está restringido al grupo de la Biblioteca de soporte?



android support annotation nullable (1)

Comencé a usar un ContextThemeWrapper para aplicar un estilo dinámicamente a un ImageButton ; basó una respuesta a otra pregunta mía y respuestas a otras questions similar .

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

Pero recientemente, un error de pelusa comenzó a aparecer en el constructor ContextThemeWrapper indicando:

ContextThemeWrapper solo se puede llamar desde el mismo grupo de bibliotecas (groupId = com.android.support)

Noté que la clase marcada con la @RestrictTo(LIBRARY_GROUP) , lo que está causando que aparezca el error de pelusa. Pero no puedo encontrar ninguna información sobre por qué está restringido al grupo de bibliotecas com.android.support .

Por lo que puedo decir, esta es la única manera de aplicar una superposición de estilo, tema o tema a una View programación; aparte de establecer un atributo de estilo predeterminado como el tercer argumento en el constructor. Así que me pregunto por qué su uso sería restringido en absoluto; ¿Hay algún problema con el uso de la clase fuera de las bibliotecas de soporte? ¿Podría haber efectos secundarios que no conozco?

La única pregunta similar que he encontrado es la de un error (ahora corregido); eso hizo que este error de pelusa se mostrara en el método onCreate de una subclase de AppCompatActivity . No creo que esta ocurrencia sea un error, sino una restricción deliberada; Me gustaría saber el razonamiento que hay detrás.

Debería tener en cuenta esta restricción (a partir de ahora) en realidad parece no tener efecto en el código usando un ContextThemeWrapper . Se compila y funciona bien, y funciona como yo esperaría.


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

La biblioteca de soporte uno está anotada en @RestrictTo(LIBRARY_GROUP) , y también en @hide , no pretende ser una API pública.

El primero es público.