Download as pdf or txt
Download as pdf or txt
You are on page 1of 6

package com.example.

formula

import android.content.Context
import android.graphics.drawable.Icon
import android.os.Bundle
import android.widget.Toast
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.material3.TextFieldDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.example.formula.ui.theme.FormulaTheme
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
FormulaTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
){
Formula()
}
}
}
}
}

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun Formula() {
//Declaramos las variables de entrada
var X by remember { mutableStateOf("") }
var F by remember { mutableStateOf("") }

var isXEmpty by remember { mutableStateOf(false) }


var isFEmpty by remember { mutableStateOf(false) }

val focusManger = LocalFocusManager.current


val context = LocalContext.current
//Creamos la columna con los campos a solicitar
Column(
modifier = Modifier
.fillMaxSize()
.padding(15.dp)
){
Text(
modifier = Modifier
.width(500.dp),
style = TextStyle(
fontSize = 30.sp
),
fontWeight = FontWeight.Bold,
textAlign = TextAlign.Center,
text = "Formula"
)
//Creamos un espacio entre los elemetos
Spacer(modifier = Modifier.padding(8.dp))
//Incertamos imagenes a la aplicacion
Image(
modifier = Modifier
.fillMaxWidth()
.height(100.dp)
.size(100.dp),
painter = painterResource(id = R.drawable.formula), contentDescription = "Divicion"
)
Spacer(modifier = Modifier.padding(vertical = 8.dp))
//Creamos dos entradad de testo
OutlinedTextField(modifier = Modifier
.fillMaxWidth(),
value = X, onValueChange = {
X = it
isXEmpty = it.isEmpty()
},
singleLine = true,
maxLines = 1,
isError = isXEmpty,
colors = TextFieldDefaults.outlinedTextFieldColors(
focusedBorderColor = Color.Green,
focusedLabelColor = Color.Blue,

//focusedBorderColor = if (!isXEmpty) Color.Red else Color.Green,


//unfocusedBorderColor = if (isXEmpty) Color.Red else Color.Gray,
//focusedLabelColor = if (isXEmpty) Color.Red else Color.Blue
),
label = {
if(!isXEmpty){
Text(text = "X ")
}else{
Row(verticalAlignment = Alignment.CenterVertically) {
Icon(
painter = painterResource(id = R.drawable.ic_error), // Puedes reemplazar con tu
propio recurso de icono de error
contentDescription = "Error",
modifier = Modifier.size(16.dp)
)
Text(
text = stringResource(id = R.string.MensajeIcon),
//color = Color.Red,
)
}
}
},
)
//Creamos un espacio enre los dos textFiles
Spacer(modifier = Modifier.padding(vertical = 8.dp))
OutlinedTextField(
modifier = Modifier
.fillMaxWidth(),
value = F,
onValueChange = {
F = it
isFEmpty = it.isEmpty()
},
singleLine = true,
maxLines = 1,
isError = isFEmpty,
colors = TextFieldDefaults.outlinedTextFieldColors(
focusedBorderColor = Color.Green,
focusedLabelColor = Color.Blue,
),
label = {
if (!isFEmpty) {
Text(text = "F")
}else{
Row(verticalAlignment = Alignment.CenterVertically) {
Icon(
painter = painterResource(id = R.drawable.ic_error), // Puedes reemplazar con tu
propio recurso de icono de error
contentDescription = "Error",
modifier = Modifier.size(16.dp)
)
Text(
text = stringResource(id = R.string.MensajeIcon),
//color = Color.Red,
)
}
}
},
)
Spacer(modifier = Modifier.padding(8.dp))
//Creamos dos botones y una sola fila
Row(
horizontalArrangement = Arrangement.spacedBy(50.dp),
verticalAlignment = Alignment.CenterVertically
){
//Creamos los Bottones de calcular y limpiar
Button(
modifier = Modifier
//Establecemos un espacio
.padding(horizontal = 32.dp),
//Establecemos un color
colors = ButtonDefaults.buttonColors(Color.DarkGray),
onClick = {
//hacemos los calculos de los valores ingresados
if(X.isNullOrEmpty() || F.isNullOrEmpty()) {
mensaje(context = context, mensaje = "Los campos son obligatorios")
}else{
try {
val Divisro = ((2*X.toDouble())+F.toDouble())
val Dividendo = ((X.toDouble())-(2*F.toDouble()))
val A = Divisro/Dividendo
if(Dividendo != 0.0){
mensaje(context,"a = $A")
}else{
mensaje(context,"La divicion entre cero no esta permitida")
}
}catch (e:NumberFormatException){
mensaje(context,"Error no se pudo realizar la operacion")
}
}
}) {
Text(text = stringResource(id = R.string.MensajeButtonC))
}
Button(
modifier = Modifier
.padding(horizontal = 16.dp),
//Establecemos un color
colors = ButtonDefaults.buttonColors(Color.DarkGray),
onClick = {
X = ""
F = ""
}) {
Text(text = stringResource(id = R.string.MensajeButonL))

}
}

fun mensaje(context: Context,mensaje:String) {


Toast.makeText(context, mensaje, Toast.LENGTH_LONG).show()
}

@Preview(showBackground = true, showSystemUi = true)


@Composable
fun GreetingPreview() {
Formula()
}
<resources>
<string name="app_name">Formula</string>
<string name="MensajeButonL">Limpiar</string>
<string name="MensajeButtonC">Calcular</string>
<string name="MensajeIcon">Valor Incorrecto</string>
</resources>

You might also like