iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android计算器编写代码
  • 980
分享到

Android计算器编写代码

编写代码写代码Android 2022-06-06 08:06:58 980人浏览 薄情痞子
摘要

其实这个安卓计算机,所有的后台思想与《C#计算器编写代码》是一模一样的。Win窗体程序移植到安卓,从C#到Java其实很简单的,因为两者的基本语法都很相像,唯一的难点是安卓的x

其实这个安卓计算机,所有的后台思想与《C#计算器编写代码》是一模一样的。Win窗体程序移植到安卓,从C#到Java其实很简单的,因为两者的基本语法都很相像,唯一的难点是安卓的xml布局部分,不像C#窗体能够直接拖。
 还是如下图一个能够完成基本四则运算的计算器: 

先在res\values\strings.xml设置按钮相应的字体,以免布局文件警告满天飞:


 <?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="app_name">计算器</string>
  <string name="bt_1">1</string>
  <string name="bt_2">2</string>
  <string name="bt_3">3</string>
  <string name="bt_4">4</string>
  <string name="bt_5">5</string>
  <string name="bt_6">6</string>
  <string name="bt_7">7</string>
  <string name="bt_8">8</string>
  <string name="bt_9">9</string>
  <string name="bt_0">0</string>
  <string name="bt_point">.</string>
  <string name="bt_ce">CE</string>
  <string name="bt_plus">+</string>
  <string name="bt_minus">-</string>
  <string name="bt_multi">×</string>
  <string name="bt_div">÷</string>
  <string name="bt_result">=</string>
</resources>

 之后,布局部分采用了《【Android】关于百分比布局多个LinearLayout嵌套时出现的问题与解决方案》(点击打开链接)的思想,具体如下图,一个TextView、一个EditText,皆直接用match_parent占据整行的宽度,之后利用LinearLayout与TableLayout作横向比例的划分。 

因此,res\layout\activity_main.xml具体代码如下,之后的操作要操作的组件加上Id,这里加上《【Android】内存卡图片读取器,图库app》(点击打开链接)的ScrollView是防止某些手机屏幕过少,加上垂直滚动条:


 <ScrollView xmlns:android="Http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" >
  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
    <TextView
      android:id="@+id/textView1"
      android:layout_width="match_parent"
      android:layout_height="wrap_content" />
    <EditText
      android:id="@+id/editText1"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:enabled="false"
      android:inputType="none"
      android:textSize="18sp" />
    <LinearLayout
      android:baselineAligned="false"
      android:layout_width="match_parent"
      android:layout_height="match_parent" >
      <TableLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="2" >
        <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="wrap_content" >
          <Button
            android:id="@+id/bt_7" 
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/bt_7" />
          <Button
            android:id="@+id/bt_8" 
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/bt_8" />
          <Button
            android:id="@+id/bt_9" 
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/bt_9" />
        </LinearLayout>
        <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="wrap_content" >
          <Button
            android:id="@+id/bt_4" 
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/bt_4" />
          <Button
            android:id="@+id/bt_5" 
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/bt_5" />
          <Button
            android:id="@+id/bt_6"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/bt_6" />
        </LinearLayout>
        <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="wrap_content" >
          <Button
            android:id="@+id/bt_1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/bt_1" />
          <Button
            android:id="@+id/bt_2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/bt_2" />
          <Button
            android:id="@+id/bt_3"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/bt_3" />
        </LinearLayout>
        <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="wrap_content" >
          <Button
            android:id="@+id/bt_0"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/bt_0" />
          <Button
            android:id="@+id/bt_point"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/bt_point" />
        </LinearLayout>
      </TableLayout>
      <TableLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1" >
        <Button
          android:id="@+id/bt_ce"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:text="@string/bt_ce" />
        <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="wrap_content" >
          <Button
            android:id="@+id/bt_plus"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/bt_plus" />
          <Button
            android:id="@+id/bt_minus"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/bt_minus" />
        </LinearLayout>
        <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="wrap_content" >
          <Button
            android:id="@+id/bt_multi"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/bt_multi" />
          <Button
            android:id="@+id/bt_div"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/bt_div" />
        </LinearLayout>
        <Button
          android:id="@+id/bt_result"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:text="@string/bt_result" />
      </TableLayout>
    </LinearLayout>
  </LinearLayout>
</ScrollView>

 之后是MainActivity.java没什么好说的,基本与直接Win窗体的《C#计算器编写代码》,将C#改成java是一个很简单的事情。唯一注意的是,这里的按钮比较多,因此不建议像《【Android】利用Java代码布局,按钮添加点击事件》(点击打开链接)一样,使用内部匿名类实现按钮的点击事件,应该让MainActivity实现OnClickListener接口,之后在继承下来的onClick方法,根据传递过来的View v中的id,利用switch-case结构来搞,这样清晰明了。


 package com.calculator;
import java.util.*;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.TextView;
import android.app.Activity;
public class MainActivity extends Activity implements OnClickListener {
 private List<Double> value_list = new ArrayList<Double>();// 存用户输入的数字
 private List<Integer> operator_list = new ArrayList<Integer>();// 存用户输入的运算符,定义+为0,-为1,×为2,÷为3
 // 状态记录
 private boolean add_flag = false;// +按下
 private boolean minus_flag = false;// -按下
 private boolean multi_flag = false;// ×按下
 private boolean div_flag = false;// ÷按下
 private boolean result_flag = false;// =按下
 private boolean can_operate_flag = false;// 按下=是否响应
 private TextView textView1;
 private EditText editText1;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 findViewById(R.id.bt_0).setOnClickListener(this);
 findViewById(R.id.bt_1).setOnClickListener(this);
 findViewById(R.id.bt_2).setOnClickListener(this);
 findViewById(R.id.bt_3).setOnClickListener(this);
 findViewById(R.id.bt_4).setOnClickListener(this);
 findViewById(R.id.bt_5).setOnClickListener(this);
 findViewById(R.id.bt_6).setOnClickListener(this);
 findViewById(R.id.bt_7).setOnClickListener(this);
 findViewById(R.id.bt_8).setOnClickListener(this);
 findViewById(R.id.bt_9).setOnClickListener(this);
 findViewById(R.id.bt_point).setOnClickListener(this);
 findViewById(R.id.bt_ce).setOnClickListener(this);
 findViewById(R.id.bt_plus).setOnClickListener(this);
 findViewById(R.id.bt_minus).setOnClickListener(this);
 findViewById(R.id.bt_multi).setOnClickListener(this);
 findViewById(R.id.bt_div).setOnClickListener(this);
 findViewById(R.id.bt_result).setOnClickListener(this);
 textView1 = (TextView) findViewById(R.id.textView1);
 editText1 = (EditText) findViewById(R.id.editText1);
 }
 @Override
 public void onClick(View v) {
 switch (v.getId()) {
 case R.id.bt_0:
  num_down("0");
  break;
 case R.id.bt_1:
  num_down("1");
  break;
 case R.id.bt_2:
  num_down("2");
  break;
 case R.id.bt_3:
  num_down("3");
  break;
 case R.id.bt_4:
  num_down("4");
  break;
 case R.id.bt_5:
  num_down("5");
  break;
 case R.id.bt_6:
  num_down("6");
  break;
 case R.id.bt_7:
  num_down("7");
  break;
 case R.id.bt_8:
  num_down("8");
  break;
 case R.id.bt_9:
  num_down("9");
  break;
 case R.id.bt_point:
  num_down(".");
  break;
 case R.id.bt_plus:
  if (!add_flag)// 防止用户多次输入一个符号键,符号键只允许输入一次
  {
  result_flag = false;
  value_list.add(Double.parseDouble(editText1.getText()
   .toString()));// 将当前已输入的数字放入value_list
  operator_list.add(0);
  textView1.setText(textView1.getText() + "+");
  add_flag = true;
  can_operate_flag = false;// 刚刚输入完符号,不能构成一条正常的表达式,如111+,设置为不可运行状态
  }
  break;
 case R.id.bt_minus:
  if (!minus_flag) {
  result_flag = false;
  value_list.add(Double.parseDouble(editText1.getText()
   .toString()));
  operator_list.add(1);
  textView1.setText(textView1.getText() + "-");
  minus_flag = true;
  can_operate_flag = false;
  }
  break;
 case R.id.bt_multi:
  if (!multi_flag) {
  result_flag = false;
  value_list.add(Double.parseDouble(editText1.getText()
   .toString()));
  operator_list.add(2);
  textView1.setText("(" + textView1.getText() + ")×");// 给前面的已经输入的东西加个括号。(运算符栈问题是一个很复杂的数据结构问题,这里不做,:P)
  multi_flag = true;
  can_operate_flag = false;
  }
  break;
 case R.id.bt_div:
  if (!div_flag) {
  result_flag = false;
  value_list.add(Double.parseDouble(editText1.getText()
   .toString()));
  operator_list.add(3);
  textView1.setText("(" + textView1.getText() + ")÷");
  div_flag = true;
  can_operate_flag = false;
  }
  break;
 case R.id.bt_result:
  if (value_list.size() > 0 && operator_list.size() > 0
   && can_operate_flag) {// 需要防止用户没输入数字,或者只输入了一个数,就按=。
  value_list.add(Double.parseDouble(editText1.getText()
   .toString()));
  double total = value_list.get(0);
  for (int i = 0; i < operator_list.size(); i++) {
   int _operator = operator_list.get(i);// operator是C#的运算符重载的关键字,前面加个_来区别
   switch (_operator) {
   case 0:
   total += value_list.get(i + 1);
   break;
   case 1:
   total -= value_list.get(i + 1);
   break;
   case 2:
   total *= value_list.get(i + 1);
   break;
   case 3:
   total /= value_list.get(i + 1);
   break;
   }
  }
  editText1.setText(total + "");
  textView1.setText(total + "");
  operator_list.clear();// 算完,就清空累积数字与运算数组
  value_list.clear();
  result_flag = true;// 表示=按下
  }
  break;
 case R.id.bt_ce:
  operator_list.clear();
  value_list.clear();
  add_flag = false;
  minus_flag = false;
  multi_flag = false;
  div_flag = false;
  result_flag = false;
  can_operate_flag = false;
  editText1.setText("");
  textView1.setText("");
  break;
 }
 }
 // 数字键按下,含0与.,类似000001223这类情况这里允许,因为java可以讲000001223自己转化为1223
 private void num_down(String num) {
 if (add_flag || minus_flag || multi_flag || div_flag || result_flag) {
  if (result_flag)// 按下等号,刚刚算完一个运算的状态
  {
  textView1.setText("");
  }
  editText1.setText("");// 如果用户刚刚输入完一个运算符
  add_flag = false;
  minus_flag = false;
  multi_flag = false;
  div_flag = false;
  result_flag = false;
 }
 if ((num.equals(".") && editText1.getText().toString().indexOf(".") < 0)
  || !num.equals(".")) {
  // 如果用户输入的是小数点.,则要判断当前已输入的数字中是否含有小数点.才允许输入
  editText1.setText(editText1.getText() + num);
  textView1.setText(textView1.getText() + num);
  can_operate_flag = true;
 }
 }
}
您可能感兴趣的文章:从零开始学android实现计算器功能示例分享(计算器源码)android计算器简单实现代码android计时器,时间计算器的实现方法Android开发实现的简单计算器功能【附完整demo源码下载】Android中使用GridLayout网格布局来制作简单的计算器AppAndroid Studio实现简易计算器android计算器代码示例分享简单实现Android计算器功能Android实战教程第一篇之最简单的计算器android实现简单计算器功能


--结束END--

本文标题: Android计算器编写代码

本文链接: https://www.lsjlt.com/news/24773.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android studio实现简单计算器的编写
    本文实例为大家分享了Android studio实现简单计算器的具体代码,供大家参考,具体内容如下 话不多说,首先附上代码: MainActivity.java package co...
    99+
    2024-04-02
  • HTML计算机代码怎么写
    本篇内容介绍了“HTML计算机代码怎么写”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 计算机代码 v...
    99+
    2024-04-02
  • java实现计算器的代码怎么写
    以下是一个简单的Java代码实现计算器的示例:```javaimport java.util.Scanner;public class Calculator {public static void main(String[] args)...
    99+
    2023-08-11
    java
  • Android开发简单计算器实现代码
    计算器项目,要求实现加、减、乘、除、求倒数、求平方根等简单运算。 真机调试结果如下图: 布局文件:main_activity.xml <?xml version=...
    99+
    2024-04-02
  • js计算时间差代码怎么写
    这篇文章主要讲解了“js计算时间差代码怎么写”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“js计算时间差代码怎么写”吧!var begintime_ms = Date.parse(new D...
    99+
    2023-07-04
  • python编写小程序(计算器)
    #coding=gbk def yunsuan(userA,userB,operate): '运算函数' try: A = int(userA) B = int(userB) opera...
    99+
    2023-01-31
    计算器 程序 python
  • C语言实现计算器的代码怎么写
    这篇文章主要介绍了C语言实现计算器的代码怎么写的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言实现计算器的代码怎么写文章都会有所收获,下面我们一起来看看吧。C语言计算器两种方法//一般做法#include&...
    99+
    2023-06-29
  • iOS实现简易计算器的代码怎么写
    本篇内容主要讲解“iOS实现简易计算器的代码怎么写”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“iOS实现简易计算器的代码怎么写”吧!初步接触视图,制作了一个简易的计算器,基本上简单的计算是没有...
    99+
    2023-06-29
  • KDJ计算代码_Python代码
     import numpy as np def KDJ(date,N=9,M1=3,M2=3): datelen=len(date) array=np.array(date) kdjarr=[] for ...
    99+
    2023-01-31
    代码 KDJ _Python
  • 编写PHP代码
    编写PHP代码 一、什么是PHP 1.1 php简介 PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种通用开源脚本语言,其可在服务器上执行。PH...
    99+
    2023-09-02
    php 学习
  • Android Drawable代码编写的新姿势分享
    目录概念优点表现形式直接子类与非直接子类xml解析流程真实案例更好的实现方式 —代码建议优点引用方式总结概念 Drawable表示一种可以在Canvas上进行绘制的抽象的...
    99+
    2024-04-02
  • Android Color颜色过度计算实现代码
    Android Color颜色过度计算实现代码在看自定义TypeEvaluator来计算属性动画的属性值时,用到了对颜色的过度计算,翻看了好多博客,找到了比较有优秀的解决方案,在此记录,以备后用。实现效果图:实现代码:private int...
    99+
    2023-05-31
    android color 颜色
  • iOS实现计算器小功能的代码怎么写
    本篇内容介绍了“iOS实现计算器小功能的代码怎么写”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本文利用ios实现计算器app,后期将用mv...
    99+
    2023-06-29
  • 使用python编写简单计算器
    ​本文实例为大家分享了python编写简单计算器的具体代码,供大家参考,具体内容如下 做一个计算器,这是我们想要的效果。 1、准备工作 导入time、tqdm、math库 from...
    99+
    2024-04-02
  • Python编写一个简单计算器
    一个计算器最主要的功能是加减乘除,那么用 Python 可以怎样实现呢 #!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2018/1/22 22:29 # @Author ...
    99+
    2023-01-31
    计算器 简单 Python
  • javascript如何编写简易计算器
    这篇文章主要介绍javascript如何编写简易计算器,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!代码如下<!DOCTYPE html> <html&n...
    99+
    2024-04-02
  • 【Android平板编程】远程Ubuntu服务器code-server编程写代码
    文章目录 前言1.ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址5.结语 前言   本次教程将在 Ubuntu 服务器环境下安装 co...
    99+
    2023-08-19
    ubuntu android 服务器
  • 如何编写margin百分比是按参照物来计算的代码
    这篇文章主要介绍“如何编写margin百分比是按参照物来计算的代码”,在日常操作中,相信很多人在如何编写margin百分比是按参照物来计算的代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,...
    99+
    2024-04-02
  • 【代码实践】手把手教你编写高效的 VUE 计算属性
    理解计算属性 计算属性是 Vue.js 中的响应式属性,用于计算和缓存派生数据值。当任何依赖项值发生更改时,计算属性将会重新计算并更新其值。这消除了对复杂或重复性计算的直接函数调用的需求。 编写高效的计算属性 编写高效计算属性遵循以下准...
    99+
    2024-02-20
    Vue.js 计算属性 响应式编程 高性能
  • javascript实现编写网页版计算器
    本篇主要记录的是利用javscript实现一个网页计算器的效果,供大家参考,具体内容如下 话不多说,代码如下: 首先是html的代码: <!DOCTYPE html>...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作