Android
[Android] 간단한 계산기 어플 만들기
DingCoDing
2022. 9. 24. 02:26
반응형
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"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:id="@+id/tvInput"
android:layout_width="match_parent"
android:layout_height="250dp"
android:background="@color/light_gray"
android:padding="10dp"
android:textSize="40dp"
android:text=""
android:gravity="right|bottom"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_margin="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal">
<Button
android:id="@+id/btnOne"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="2dp"
android:layout_weight="1"
android:onClick="onDigit"
android:text="@string/_1" />
<Button
android:id="@+id/btnTwo"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="2dp"
android:layout_weight="1"
android:onClick="onDigit"
android:text="@string/_2" />
<Button
android:id="@+id/btnThree"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="2dp"
android:layout_weight="1"
android:onClick="onDigit"
android:text="@string/_3" />
<Button
android:id="@+id/btnSubtract"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="2dp"
android:layout_weight="1"
android:onClick="onOperator"
android:text="@string/minus" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="1"
>
<Button
android:id="@+id/btnFour"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_margin="2dp"
android:onClick="onDigit"
android:text="@string/_4"/>
<Button
android:id="@+id/btnFive"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_margin="2dp"
android:onClick="onDigit"
android:text="@string/_5"/>
<Button
android:id="@+id/btnSix"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_margin="2dp"
android:onClick="onDigit"
android:text="@string/_6"/>
<Button
android:id="@+id/btnMultiply"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_margin="2dp"
android:onClick="onOperator"
android:text="@string/multiply"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="1"
>
<Button
android:id="@+id/btnSeven"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_margin="2dp"
android:onClick="onDigit"
android:text="@string/_7"/>
<Button
android:id="@+id/btnEight"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_margin="2dp"
android:onClick="onDigit"
android:text="@string/_8"/>
<Button
android:id="@+id/btnNine"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_margin="2dp"
android:onClick="onDigit"
android:text="@string/_9"/>
<Button
android:id="@+id/btnDivide"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_margin="2dp"
android:onClick="onOperator"
android:text="@string/div"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="1"
>
<Button
android:id="@+id/btnDot"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_margin="2dp"
android:onClick="onDecimalPoint"
android:text="."/>
<Button
android:id="@+id/btnZero"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_margin="2dp"
android:onClick="onDigit"
android:text="0"/>
<Button
android:id="@+id/btnClr"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_margin="2dp"
android:onClick="onClear"
android:text="CLR"/>
<Button
android:id="@+id/btnAdd"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_margin="2dp"
android:onClick="onOperator"
android:text="+"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="1"
>
<Button
android:id="@+id/btnEqaul"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:layout_margin="2dp"
android:onClick="onEqaul"
android:text="="/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
MainActivity.kt
package com.example.mycalculator
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import java.lang.ArithmeticException
class MainActivity : AppCompatActivity() {
private var tvInput: TextView? = null
var lastNumeric : Boolean = false
var lastDot : Boolean = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
tvInput = findViewById(R.id.tvInput)
}
fun onDigit(view:View){
tvInput?.append((view as Button).text)
lastNumeric = true
Toast.makeText(this, "Button clicked", Toast.LENGTH_LONG).show()
}
fun onDecimalPoint(view:View){
if(lastNumeric && !lastDot){
tvInput?.append(".")
lastNumeric = false
lastDot = true
}
}
fun onClear(view: View){
tvInput?.text = ""
}
fun onOperator(view: View){
tvInput?.text?.let {
if (lastNumeric && !isOperatorAdded(it.toString())){
tvInput?.append((view as Button).text)
lastNumeric = false
lastDot = false
}
}
}
fun onEqaul(view : View){
if(lastNumeric){
var tvValue = tvInput?.text.toString()
var prefix = ""
try{
if(tvValue.startsWith("-")){
prefix = "-"
tvValue = tvValue.substring(1)
}
if(tvValue.contains("-")){
val splitValue = tvValue.split("-")
var one = splitValue[0]
var two = splitValue[1]
if(prefix.isNotEmpty()){
one = prefix + one
}
tvInput?.text = removeZeroAfterDot((one.toDouble() - two.toDouble()).toString())
} else if(tvValue.contains("+")){
val splitValue = tvValue.split("+")
var one = splitValue[0]
var two = splitValue[1]
if(prefix.isNotEmpty()){
one = prefix + one
}
tvInput?.text = removeZeroAfterDot((one.toDouble() + two.toDouble()).toString())
}else if(tvValue.contains("*")){
val splitValue = tvValue.split("*")
var one = splitValue[0]
var two = splitValue[1]
if(prefix.isNotEmpty()){
one = prefix + one
}
tvInput?.text = removeZeroAfterDot((one.toDouble() * two.toDouble()).toString())
}else if(tvValue.contains("/")){
val splitValue = tvValue.split("/")
var one = splitValue[0]
var two = splitValue[1]
if(prefix.isNotEmpty()){
one = prefix + one
}
tvInput?.text = removeZeroAfterDot((one.toDouble() / two.toDouble()).toString())
}
}catch(e: ArithmeticException){
e.printStackTrace()
}
}
}
private fun removeZeroAfterDot(result: String) : String{
var value = result
if(result.contains(".0"))
value = result.substring(0, result.length-2)
return value
}
private fun isOperatorAdded(value : String) : Boolean{
return if(value.startsWith("-")){
false
}else{
value.contains("/") || value.contains("*") || value.contains("+") || value.contains("-")
}
}
}
반응형