(1) Utwórz interfejs kalkulatora arytmetycznego, rozmieszczając przyciski z cyframi oraz odpowiednie przyciski działań. Dodaj podstawową obsługę zdarzeń która pozwala na realizację operacji dodawania. Możesz w tym celu wykorzystać przykład poniżej. Przedyskutuj z koleżanką/kolegą metodologię rozmieszczania elementów interfejsu graficznego oraz sposób w jaki realizowana jest obsługa zdarzeń.
package com.tango.nuevo.app01 import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material3.Button import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableIntState import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.sp class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { Calc() } } @Composable fun Calc(){ val s: MutableState<String> = remember{mutableStateOf("0")} val op: MutableState<Char> = remember{mutableStateOf('+')} val buf: MutableIntState = remember{mutableIntStateOf(0)} Column( modifier = Modifier.fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ){ Row{ Text( modifier = Modifier.fillMaxWidth(0.5f), text = s.value, fontSize = 20.sp ) } Row{ Button(onClick = { if (s.value == "0") s.value = "1" else s.value += "1" }) { Text(text = "1") } Button(onClick = {if(s.value == "0") s.value="2" else s.value+="2"}) { Text( text="2" ) } Button(onClick = {if(s.value == "0") s.value="3" else s.value+="3"}) { Text( text="3" ) } Button(onClick = {op.value='+'; buf.intValue = s.value.toInt(); s.value="0"}) { Text( text="+" ) } } Row{ Button(onClick = {if(s.value == "0") s.value="4" else s.value+="4"}) { Text( text="4" ) } Button(onClick = {}) { Text( text="" ) } Button(onClick = {}) { Text( text="" ) } Button(onClick = {}) { Text( text="" ) } } Row{ Button(onClick = {if(s.value == "0") s.value="7" else s.value+="7"}) { Text( text="7" ) } Button(onClick = {}) { Text( text="" ) } Button(onClick = {}) { Text( text="" ) } Button(onClick = {}) { Text( text="" ) } } Row{ Button(onClick = {s.value="0" }) { Text( text="C" ) } Button( onClick = {buf.intValue += s.value.toInt(); s.value = buf.intValue.toString()}, modifier = Modifier.fillMaxWidth(0.5f) ) { Text( text="=" ) } } } } }
(2) Wykorzystując poniższy szkielet MainActivity, napisz pełną implementację logiki kalkulatora (pozostałe działania, kropkę dziesiętną, pamięć, funkcje trygonometryczne, logarytmy i inne funkcjonalności które uznasz za stosowne).