Restructurare Cod Template
Restructurarea codului din template-ul de Empty Activity. Cum am observat deja, codul din template ne afiseaza mesajul Hello World. Vom modifica o parte din codul generat pentru a se asemăna mai mult cu tema unei aplicații de aruncare a zarului. Vom realiza urmatoarele modificari:
In laboratorul de astazi, cand importam automat dependinte, vom alege sursa cu Composable in nume.
- Eliminăm funcția
GreetingPreview()
. - Definim o funcție
DiceWithButtonAndImage()
cu adnotarea@Composable
. Această funcție compozabilă reprezintă componentele UI ale layout-ului și conține, de asemenea, logica pentru click-ul butonului și afișarea imaginii. - Eliminăm funcția
Greeting(name: String, modifier: Modifier = Modifier)
. - Definim o funcție
DiceRollerApp()
cu adnotările@Preview
și@Composable
. - Deoarece această aplicație constă doar dintr-un buton și o imagine,
putem considera această funcție compozabilă ca fiind aplicația în sine. De aici si numele,
DiceRollerApp()
.
/* MainActivity.kt */
@Preview
@Composable
fun DiceRollerApp() {
}
@Composable
fun DiceWithButtonAndImage() {
}
Deoarece am eliminat funcția Greeting()
, apelul către Greeting("Android")
din corpul lambda-ului DiceRollerTheme()
este evidențiat cu roșu. Asta pentru că compilatorul nu mai poate găsi o referință la acea funcție.
- Ștergem tot codul din interiorul lambda-ului
setContent{}
găsit în metodaonCreate()
. - În corpul lambda-ului
setContent{}
, apelează lambda-ulDiceRollerTheme{}
și apoi în interiorul lambda-uluiDiceRollerTheme{}
, apelează funcțiaDiceRollerApp()
.
/* MainActivity.kt */
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
// Aici o sa punem numele temei, implicit este creata o tema cu numele proiectului
// O gasiti si in uithemes/Theme.kt
DiceRollerTheme {
DiceRollerApp()
}
}
}
În funcția DiceRollerApp()
, apelam DiceWithButtonAndImage()
, functie in care vom defini interfata grafica.
/* MainActivity.kt */
@Preview
@Composable
fun DiceRollerApp() {
DiceWithButtonAndImage()
}