2017-02-24 4 views
1

J'ai implémenté une classe qui fait diverses requêtes-api, mon idée était que chaque instance de la classe a une méthode pour créer une vue ayant une interface similaire à tile.Vue Anko de la classe

Mon problème est que je ne sais pas comment cela devrait être mis en œuvre dans le bon sens.

Quelle est la manière préférée de faire cela en utilisant Anko et Kotlin?

Répondre

0

Anko a un grand documentation about that case (Mais qui a lu docs, ouais?)

Disons que, CustomView est votre nom de classe personnalisée View et customView est ce que vous voulez écrire dans le DSL.

Si vous ne prévoyez d'utiliser votre commande View dans le DSL entouré de un autre View:

inline fun ViewManager.customView(theme: Int = 0) = customView(theme) {} 
inline fun ViewManager.customView(theme: Int = 0, init: CustomView.() -> Unit) = ankoView({ CustomView(it) }, theme, init) 

Ainsi, vous pouvez maintenant écrire ceci:

frameLayout { 
    customView() 
} 

... ou ce (voir Chapitre de l'encapsulation de l'interface utilisateur):

UI { 
    customView() 
} 

Mais si vous voulez utiliser votre point de vue d'un widget de haut niveau sans emballage UI à l'intérieur Activity, ajoutez ainsi:

inline fun Activity.customView(theme: Int = 0) = customView(theme) {} 
inline fun Activity.customView(theme: Int = 0, init: CustomView.() -> Unit) = ankoView({ CustomView(it) }, theme, init) 

Exemple (c'est juste comment je l'utiliser, vous pouvez choisir approche différente):

class YourAwesomeButton: Button() { 
    /* ... */ 
    fun makeThisButtonAwesome() {/* ... */} 
} 

/** This lines may be in any file of the project, but better to put them right under the button class */ 
inline fun ViewManager.yourAwesomeButton(theme: Int = 0) = yourAwesomeButton(theme) {} 
inline fun ViewManager.yourAwesomeButton(theme: Int = 0, init: CustomView.() -> Unit) = 
    ankoView({ YourAwesomeButton(it) }, theme, init) 

Dans un autre fichier:

class YourAwesomeActivity: Activity() { 
    override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(saveInstanceState) 
     relativeLayout(R.style.YourAwesomeAppTheme) { 
      yourAwesomeButton(R.style.YourAwesomeAppTheme) { 
       makeThisButtonAwesome() 
      }.lparams { 
       centerInParent() 
      } 
     } 
    } 
} 
+0

J'ai lu cette partie de la documentation, mais pour moi, il ne sait pas encore sur h Vous devez utiliser ces extraits de code. Avez-vous un exemple? – aul12

+0

@ aul12 a ajouté un exemple –