Day: November 25, 2020
em kotlin: uma calculadora
ficheiro: MainActivity.kt
package pt.deis.estuda.calculadora import android.graphics.Color import android.icu.number.NumberFormatter import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.View import android.widget.Button import android.widget.TextView class MainActivity : AppCompatActivity() { lateinit var tvDisplay: TextView //variave para ligar a maquina var strDisplay = "0.0" var novoNumero = true //para tratar do % val numeroCorente : Double //caso dê erro converter fica com 0.0 //o então escrever error get()=strDisplay.toDoubleOrNull() ?: 0.0 //variavel para lidar com a operação //v1 /* enum class Ops{ NONE, ADD, SUB, MUL, DIv } var op = Ops.NONE */ //v2 //id da operação var operador = 0 //alterar a cor do operador set(value){ if(field !=0 ){ findViewById<Button>(field).setTextColor(Color.BLACK) } if(value !=0){ findViewById<Button>(value).setTextColor(Color.GREEN) } field =value } var numeroAntigo = 0.0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) tvDisplay = findViewById(R.id.tvDisplay) updateDisplay() //para mostrar o 0.0 } fun updateDisplay(){ tvDisplay.text = strDisplay } fun onDigit(view: View) { ///ir buscar o texto do botão e adicionar à caixa val btn = view as Button //para resolver a situaçãod e ser a primeira vez if(novoNumero) { strDisplay = btn.text.toString() } else { strDisplay += btn.text //concatenar ao que lá está } updateDisplay() //para que efectivamente faça a concatenação novoNumero = false } fun onPonto(view: View) { //só pode exisir um ponto no numero if(novoNumero) { strDisplay = "0." }else{ //adicionar o ponto, mas testar se já existe if(strDisplay.contains('.')) return strDisplay += "." } updateDisplay() novoNumero = false } fun onAC(view: View) { strDisplay = "0.0" novoNumero = true updateDisplay() } fun onPM(view: View) { //o sinal do mais menos if(strDisplay[0] == '-'){ strDisplay = strDisplay.substring(1) }else{ //ou strDisplay = "-"+strDisplay //v1 strDisplay = "-$strDisplay" //v2 } updateDisplay() } fun onPer(view: View) { //dividir o valor que existe por 100 strDisplay = "" + numeroCorente / 100.0 updateDisplay() //talvez não usar o true //true: não permite acrescentar mais caracteres novoNumero = true } //versão individual do onOper //v1 fun onMais(view: View) {} fun onSub(view: View) {} fun onDiv(view: View) {} fun onMultiplica(view: View) {} //v2 fun onOper(view : View){ //manter as operações if(operador != 0 && !novoNumero){ onIgual(view) } numeroAntigo = numeroCorente novoNumero = true operador = view.id } fun onIgual(view: View) { var calculo = 0.0 when(operador){ R.id.bntMais -> calculo = numeroCorente + numeroAntigo R.id.btnMul -> calculo = numeroCorente * numeroAntigo R.id.bntSub -> calculo = numeroAntigo - numeroCorente R.id.bntDiv -> calculo = if(numeroCorente != 0.0) numeroAntigo / numeroCorente else 0.0 //caso não tenha operador para fazer else -> return } //actualizar de seguida o display strDisplay = "$calculo" novoNumero = true operador = 0 //manter o numero numeroAntigo = calculo updateDisplay() } }
ficheiro: themes.xml
<resources xmlns:tools="http://schemas.android.com/tools"> <!-- Base application theme. --> <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cstyle%20name%3D%22Theme.Calculadora%22%20parent%3D%22Theme.AppCompat.Light.DarkActionBar%22%3E%0A%20%20%20%20%20%20%20%20%3C!--%20alterar%20o%20tema%20aqui.%20--%3E%0A%0A%20%20%20%20%20%20%20%20%3C!--%20cor%20preta%20default%20--%3E%0A%20%20%20%20%20%20%20%20%3Citem%20name%3D%22android%3AtextColor%22%3E%23000000%3C%2Fitem%3E%0A%0A%20%20%20%20%3C%2Fstyle%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<style>" title="<style>" /> </resources>
ficheiro: activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="vertical" android:background="#c0c0c0" android:padding="16dp" > <TextView android:id="@+id/tvDisplay" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="0.0" android:gravity="right" android:textSize="24sp" android:padding="16dp" android:background="#ffffc0" android:layout_marginBottom="20dp" /> <!-- android:layout_height="0dp" //distribuir o espaço da mesma forma (é o peso) android:layout_weight="1" //por termos peso a altura tem que ter 0dp --> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal"> <!-- android:id="@+id/bntAC" //atribuir sempre um id android:layout_weight="1" //distribuir o espaço da mesma forma (é o peso) android:layout_width="0dp" //por termos peso a largura tem que ter 0dp --> <Button android:id="@+id/bntAC" android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" android:text="AC" android:textSize="20sp" android:onClick="onAC" /> <Button android:id="@+id/bntPM" android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" android:text="+/-" android:textSize="20sp" android:onClick="onPM" /> <Button android:id="@+id/bntPerc" android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" android:text="%" android:textSize="20sp" android:onClick="onPer" /> <Button android:id="@+id/bntDiv" android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" android:text="/" android:textSize="20sp" android:onClick="onOper" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal"> <!-- android:id="@+id/bntAC" //atribuir sempre um id android:layout_weight="1" //distribuir o espaço da mesma forma (é o peso) android:layout_width="0dp" //por termos peso a largura tem que ter 0dp android:onClick="onDigit" é uma funça --> <Button android:id="@+id/bnt7" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:onClick="onDigit" android:text="7" android:textSize="20sp" /> <Button android:id="@+id/bnt8" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:onClick="onDigit" android:text="8" android:textSize="20sp" /> <Button android:id="@+id/bnt9" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:onClick="onDigit" android:text="9" android:textSize="20sp" /> <Button android:id="@+id/btnMul" android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" android:text="*" android:textSize="20sp" android:onClick="onOper" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal"> <!-- android:id="@+id/bntAC" //atribuir sempre um id android:layout_weight="1" //distribuir o espaço da mesma forma (é o peso) android:layout_width="0dp" //por termos peso a largura tem que ter 0dp --> <Button android:id="@+id/bnt4" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:onClick="onDigit" android:text="4" android:textSize="20sp" /> <Button android:id="@+id/bnt5" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:onClick="onDigit" android:text="5" android:textSize="20sp" /> <Button android:id="@+id/bnt6" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:onClick="onDigit" android:text="6" android:textSize="20sp" /> <Button android:id="@+id/bntSub" android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" android:text="-" android:textSize="20sp" android:onClick="onOper" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal"> <!-- android:id="@+id/bntAC" //atribuir sempre um id android:layout_weight="1" //distribuir o espaço da mesma forma (é o peso) android:layout_width="0dp" //por termos peso a largura tem que ter 0dp --> <Button android:id="@+id/bnt1" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:onClick="onDigit" android:text="1" android:textSize="20sp" /> <Button android:id="@+id/bnt2" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:onClick="onDigit" android:text="2" android:textSize="20sp" /> <Button android:id="@+id/bnt3" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:onClick="onDigit" android:text="3" android:textSize="20sp" /> <Button android:id="@+id/bntMais" android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" android:text="+" android:textSize="20sp" android:onClick="onOper" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal"> <!-- android:id="@+id/bntAC" //atribuir sempre um id android:layout_weight="1" //distribuir o espaço da mesma forma (é o peso) android:layout_width="0dp" //por termos peso a largura tem que ter 0dp --> <Button android:id="@+id/bnt0" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="2" android:onClick="onDigit" android:text="0" android:textSize="20sp" /> <Button android:id="@+id/bntPonto" android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" android:text="." android:textSize="20sp" android:onClick="onPonto" /> <Button android:id="@+id/bntIgual" android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" android:text="=" android:textSize="20sp" android:onClick="onIgual" /> </LinearLayout> </LinearLayout>
Tags : amov, android, arquitecturas móveis (kotlin), kotlin, Learn android, t2021