900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Android开发:kotlin语言实现简易计算器

Android开发:kotlin语言实现简易计算器

时间:2023-08-28 10:01:43

相关推荐

Android开发:kotlin语言实现简易计算器

Android开发:kotlin语言实现简易计算器

1. 实现效果2. 主要文件代码:界面布局:activity_main.xml文件代码字符定义:string.xml文件代码逻辑实现:MainActivity.kt 文件代码3. 具体实现步骤方法一(偷懒):方法二:1. 绘制界面2. 编写逻辑代码3. 设置多语言

1. 实现效果

输入两个数字,可选加减乘除操作符,并计算显示对应结果

随系统切换语言

可对结果进行四舍五入操作

2. 主要文件代码:

界面布局:activity_main.xml文件代码

<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><RadioGroupandroid:id="@+id/radioGroup"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginStart="25dp"android:layout_marginTop="64dp"android:layout_marginBottom="456dp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"><TextViewandroid:id="@+id/textView"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/operator"android:textColor="@color/purple_700"android:textSize="20sp"android:textStyle="bold" /><RadioButtonandroid:id="@+id/add_opt"android:layout_width="match_parent"android:layout_height="wrap_content"android:checked="false"android:text="@string/add"android:textColor="@color/black"android:textSize="16sp" /><RadioButtonandroid:id="@+id/sub_opt"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/sub"android:textColor="@color/black"android:textSize="16sp" /><RadioButtonandroid:id="@+id/mul_opt"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/mul"android:textColor="@color/black"android:textSize="16sp" /><RadioButtonandroid:id="@+id/div_opt"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/div"android:textColor="@color/black"android:textSize="16sp" /></RadioGroup><EditTextandroid:id="@+id/number1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginStart="36dp"android:layout_marginTop="64dp"android:layout_marginEnd="36dp"android:autofillHints=""android:ems="10"android:hint="@string/please_input_a_number1"android:inputType="numberDecimal"android:minHeight="48dp"android:textColorHint="#757575"android:textSize="20sp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toEndOf="@+id/radioGroup"app:layout_constraintTop_toTopOf="parent"tools:ignore="SpeakableTextPresentCheck" /><EditTextandroid:id="@+id/number2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginStart="36dp"android:layout_marginTop="32dp"android:layout_marginEnd="36dp"android:autofillHints=""android:ems="10"android:hint="@string/please_input_a_number2"android:inputType="numberDecimal"android:minHeight="48dp"android:textColorHint="#757575"android:textSize="20sp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toEndOf="@+id/radioGroup"app:layout_constraintTop_toBottomOf="@+id/number1"tools:ignore="SpeakableTextPresentCheck" /><TextViewandroid:id="@+id/calcResult"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="32dp"tools:text="Result: 0.0"android:textColor="@color/purple_700"android:textSize="24sp"android:textStyle="bold"app:layout_constraintEnd_toEndOf="@+id/number2"app:layout_constraintStart_toStartOf="@+id/number2"app:layout_constraintTop_toBottomOf="@+id/number2" /><Buttonandroid:id="@+id/calculate"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginHorizontal="10dp"android:layout_marginBottom="300dp"android:text="@string/calculate"android:textSize="16sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toEndOf="@+id/clear" /><Buttonandroid:id="@+id/clear"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginHorizontal="10dp"android:layout_marginBottom="300dp"android:text="@string/clear"android:textSize="16sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toStartOf="@+id/calculate"app:layout_constraintStart_toStartOf="parent" /><Switchandroid:id="@+id/roundUpResult"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginStart="32dp"android:layout_marginTop="32dp"android:layout_marginBottom="32dp"android:checked="true"android:minHeight="48dp"android:text="@string/round_up_result"android:textSize="20sp"app:layout_constraintBottom_toTopOf="@+id/calculate"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/radioGroup" /></androidx.constraintlayout.widget.ConstraintLayout>

字符定义:string.xml文件代码

<resources><string name="app_name">Calculator</string><string name="operator">Operator</string><string name="add">Add</string><string name="sub">Sub</string><string name="mul">Mul</string><string name="div">Div</string><string name="calc_result">Result: %s</string><string name="clear">Clear</string><string name="calculate">Calculate</string><string name="please_input_a_number1">The First Number</string><string name="please_input_a_number2">The Second Number</string><string name="round_up_result">Round Up Result?</string></resources>

逻辑实现:MainActivity.kt 文件代码

package com.example.calculatorimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport com.example.calculator.databinding.ActivityMainBindingimport kotlin.math.roundclass MainActivity : AppCompatActivity() {private lateinit var binding: ActivityMainBindingoverride fun onCreate(savedInstanceState: Bundle?) {binding = ActivityMainBinding.inflate(layoutInflater)super.onCreate(savedInstanceState)setContentView(binding.root)binding.calculate.setOnClickListener { calculate() }binding.clear.setOnClickListener { clear() }displayResult(0.0)}private fun calculate() {val num1 = binding.number1.text.toString().toDoubleOrNull()val num2 = binding.number2.text.toString().toDoubleOrNull()if (num1 == null) {displayResult(0.0)return}if (num2 == null) {displayResult(0.0)return}// 获取var calResult = when(binding.radioGroup.checkedRadioButtonId){R.id.add_opt -> num1+num2R.id.sub_opt -> num1-num2R.id.mul_opt -> num1*num2R.id.div_opt -> if (num2 != 0.0) {num1/num2} else { 0.0 }else -> { 0.0 }}calResult = String.format("%.2f", calResult).toDouble()// 是否四舍五入?if (binding.roundUpResult.isChecked) {calResult = round(calResult)}displayResult(calResult)}fun displayResult(result: Double) {// 结果显示binding.calcResult.text = getString(R.string.calc_result,result.toString())}fun clear(){// 清空操作binding.number1.text.clear()binding.number2.text.clear()displayResult(0.0)binding.radioGroup.clearCheck()binding.roundUpResult.isChecked = true}}

3. 具体实现步骤

方法一(偷懒):

复制文件到对应位置

方法二:

1. 绘制界面

2. 编写逻辑代码

本例为了简化,使用了viewbinding 绑定方法,并未使用findViewById()。故需进行以下处理:

在build.gradle(Module: Calulate.app) 文件添加以下代码:

buildFeatures{viewBinding = true}

如报错,需在gradle.properties 文件中加入以下代码:

android.enableD8=trueandroid.injected.testOnly=falseandroid.enableJetifier=true

然后便可以使用viewbinding绑定方法(当然大家可以使用findViewById,笔者认为麻烦)

最后复制MainActivity.kt文件代码即可,逻辑不难,故不讲解

3. 设置多语言

然后便可以使用viewbinding绑定方法(当然大家可以使用findViewById,笔者认为麻烦)

最后复制MainActivity.kt文件代码即可,逻辑不难,故不讲解

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。