El constructor de vista personalizada en Android 4.4 se bloquea en Kotlin, ¿cómo arreglarlo?

Tengo una vista personalizada escrita en Kotlin usando JvmOverloads que podría tener valor por defecto.

class MyView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyle: Int = 0, defStyleRes: Int = 0 ) : LinearLayout(context, attrs, defStyle, defStyleRes) 

Todo funciona bien en Android 5.1 o superior.

Sin embargo, se bloquea en 4.4, ya que el constructor en 4.4 no tiene defStyleRes . ¿Cómo podría tener que apoyado que en 5.1 y más arriba podría tener defStyleRes pero no en 4.4, sin necesidad de tener explícitamente 4 constructores definidos como lo hicimos en Java?

Nota: El siguiente funciona bien en 4.4, pero luego se pierden los defStyleRes .

 class MyView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyle: Int = 0 ) : LinearLayout(context, attrs, defStyle) 

La mejor manera es tener a tu clase de esta manera.

 class MyView : LinearLayout { @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : super(context, attrs, defStyleAttr) @TargetApi(Build.VERSION_CODES.LOLLIPOP) constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) } 

Tengo una forma de hacerlo. Simplemente sobrecargue las 3 primeras funciones, deje la 4ta para Lollipop y encima de wrap con @TargetApi.

 class MyView : LinearLayout { @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : super(context, attrs, defStyleAttr) @TargetApi(Build.VERSION_CODES.LOLLIPOP) constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) } 
  • Daga de referencia no resuelta 2 + kotlin + androide gradle
  • Call class 'constructor por reflexión con Kotlin
  • Parece ser un error en la biblioteca de diseño de soporte
  • Gson no puede analizar una cadena de datos de formato json en Kotlin
  • Travis ci build failing - causa: PermGen espacio
  • ¿Es posible reutilizar un diseño en Kotlin Anko
  • Crear una instancia de una clase abstracta en Kotlin
  • Horizontal LinearLayout en Anko
  • Gradle 3.0.0-alpha1 no es compatible con kotlin-android plugin 1.1.2-3?
  • Kotlin: @ propiedades ignoradas persistidas por Sugar ORM
  • No se puede encontrar setter para el campo - utilizando Kotlin con base de datos de la sala
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.