¿Por qué ContextThemeWrapper está ahora restringido al grupo Support Library?
Empecé a usar un ContextThemeWrapper
para aplicar un estilo dinámicamente a un ImageButton
; Basado en una respuesta a otra pregunta mía, y respuestas a otras preguntas similares .
ContextThemeWrapper wrapper = new ContextThemeWrapper(getContext(), mStyleRes); mImageButton = new AppCompatImageButton(wrapper, null, 0);
Recientemente, un error de pelusa comenzó a aparecer en el constructor ContextThemeWrapper
declarando:
- ERROR: problemas de procesamiento No se encontraron las clases siguientes android.support.v7.internal.widget.ActionBarOverlayLayout
- SDK de Facebook para Android duplicar la biblioteca de soporte en las dependencias
- Android ClassNotFoundException for Support v7 TestActivity
- Fragmento vs Fragmento de soporte al apuntar api 21 (Android 5.0) y superior
- No se puede crear la compilación de la versión tras actualizar los servicios de reproducción a 8.3.0
ContextThemeWrapper
sólo se puede llamar desde el mismo grupo de la biblioteca (groupId = com.android.support)
Me di cuenta de que la clase marcada con la @RestrictTo(LIBRARY_GROUP)
, que está haciendo que aparezca el error de pelusa. Pero no encuentro 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 una sobre un error (ahora fijo); Que causó 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; Que me gustaría saber el razonamiento detrás.
Debo notar; Esta restricción (a partir de ahora) en realidad parece no tener ningún efecto en el código utilizando un ContextThemeWrapper
. Se compila y funciona bien, y funciona como yo lo esperaría.
- NullPointerException al cambiar entre fragmentos que contienen RecyclerView
- Cómo obtener la distancia de desplazamiento correcta de RecyclerView cuando se utiliza un StaggeredGridLayoutManager?
- DialogFragment: NullPointerException (biblioteca de soporte)
- Uso de android.support.v4.app o android.app para DialogFragment?
- No se encuentra la biblioteca de soporte de preferencias v7 en Eclipse ADT
- Android.app Fragments vs. android.support.v4.app usando ViewPager?
- El menú de opciones que no se muestra en ICS utilizando la biblioteca de compatibilidad
- Android no cambia el tamaño de mi diseño cuando hay un NestedScrollView en la jerarquía
android.view.ContextThemeWrapper
! = android.support.v7.view.ContextThemeWrapper
.
La biblioteca de soporte está anotada @RestrictTo(LIBRARY_GROUP)
, y también @hide
– no pretende ser una API pública.
La primera es pública.