¿Cómo usar Anko DSL dentro de un Fragmento?

La página wiki de Github muestra este ejemplo para ser usado en la instancia de Activity :

 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) verticalLayout { padding = dip(30) editText { hint = "Name" textSize = 24f } editText { hint = "Password" textSize = 24f } button("Login") { textSize = 26f } } } 

¿Cómo hacer lo mismo dentro de un Fragment ?

Intenté poner ese bloque verticalLayout en onCreateView pero el método no puede ser resuelto. He añadido la dependencia de anko-support-v4 , pero todavía no hay suerte.

Con Anko 0.8 también puede usar un AnkoComponent , si desea mantener su interfaz de usuario en una clase aparte para que pueda volver a usarla en otro lugar.

 class FragmentUi<T>: AnkoComponent<T> { override fun createView(ui: AnkoContext<T>) = with(ui) { verticalLayout { // ... } } } 

Puedes llamarlo en tu fragmento onCreateView() por

 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View = FragmentUi<Fragment>().createView(AnkoContext.create(ctx, this)) 

Después de desenterrar el código fuente anko-support-v4 , más algunos ensayos y errores, he encontrado una solución aunque no estoy seguro si es la forma correcta / recomendada. Parece un poco indocumentado.

Una muestra de mi Fragment código:

 override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { return UI { verticalLayout { linearLayout { avatar = imageView().lparams(width = dip(48), height = dip (48)) name = textView().lparams(width = 0, weight = 1f) } linearLayout { // ... } } }.toView() } 

Estoy regresando DSL diseño envuelto en UI { ... }.toView() en Fragment.onCreateView(...)

A partir de anko 0.8.1 el código correcto sería:

 override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { return UI { verticalLayout { linearLayout { // ... } linearLayout { // ... } } }.view } 
  • Referencia no resuelta para Dagger 2 en Kotlin
  • ¿Cuáles son las ventajas del lenguaje de programación Kotlin?
  • El proyecto no se construirá con Kotlin 1.1.3
  • Android Kotlin: Error Referencia sin resolver: DaggerAppComponent
  • Android Room - consulta de selección simple - No se puede acceder a la base de datos en el hilo principal
  • ¿Cómo utilizar Android Support typedef anotaciones en kotlin?
  • Cómo utilizar Data Binding y Kotlin en Android Studio 3.0.0
  • ClassNotFoundException en el sabor personalizado con kotlin
  • Sabor del producto: Clase duplicada encontrada
  • ¿Hay alguna manera de reutilizar una instancia de Job?
  • Retrofit2 + SimpleXML en Kotlin: MethodException: La anotación debe marcar un método set o get
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.