热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

AndroidStudio实现简易计算器(表格布局TableLayout)

这篇文章主要为大家详细介绍了AndroidStudio实现简易计算器,表格布局TableLayout,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

这是一个运用网格布局来做的简易计算器,可能没有那么美观,大家可以继续完善

首先先看看成果吧

首先先建一个新的Project Calculator
然后先编写颜色背景文件
创建一个gray.xml,哪里创建呢?如图
在drawable下右击,选择new–Drawable resource file

第一个是文件名字,第二个属性可以自己选择,我们这里前两个文件选择shape,第三个文件选selector,附上颜色背景代码

gray.xml

<&#63;xml version="1.0" encoding="utf-8"&#63;>


 
 
 

orange.xml

<&#63;xml version="1.0" encoding="utf-8"&#63;>

  // 圆角
  //颜色

white.xml

<&#63;xml version="1.0" encoding="utf-8"&#63;>



 
 
 

change.xml

<&#63;xml version="1.0" encoding="utf-8"&#63;>



  //默认颜色
  //按下的改变的颜色

这个是当你按下按键的时候按键会改变颜色

接下来就是布局文件了

activity_main.xml

我用的是表格布局,大家也可以用表格布局来写,效果会好一些

<&#63;xml version="1.0" encoding="utf-8"&#63;>



 


 

 

接下来就是MainActivity.java

package com.example.calculator;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

 Button btn_clean,btn_del,btn_divide,btn_0,btn_1,btn_2,btn_3,btn_4,btn_5,btn_6,btn_7,btn_8,btn_9,
 btn_multiply,btn_add,btn_minus,btn_point,btn_equal;
 TextView textView;
 boolean clear_flag;  //清空标识
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate (savedInstanceState);
 setContentView (R.layout.activity_main);
 btn_0 = findViewById(R.id.btn_0); //初始化
 btn_1 = findViewById(R.id.btn_1);
 btn_2 = findViewById(R.id.btn_2);
 btn_3 = findViewById(R.id.btn_3);
 btn_4 = findViewById(R.id.btn_4);
 btn_5 = findViewById(R.id.btn_5);
 btn_6 = findViewById(R.id.btn_6);
 btn_7 = findViewById(R.id.btn_7);
 btn_8 = findViewById(R.id.btn_8);
 btn_9 = findViewById(R.id.btn_9);
 btn_multiply = findViewById(R.id.btn_multiply);
 btn_divide = findViewById(R.id.btn_divide);
 btn_add = findViewById(R.id.btn_add);
 btn_minus = findViewById(R.id.btn_minus);
 btn_point = findViewById(R.id.btn_point);
 btn_del =findViewById(R.id.btn_del);
 btn_equal = findViewById(R.id.btn_equal);
 btn_clean = findViewById(R.id.btn_clean);

 textView = findViewById(R.id.textView);

 btn_0.setOnClickListener(this); //设置按钮的点击事件
 btn_1.setOnClickListener(this);
 btn_2.setOnClickListener(this);
 btn_3.setOnClickListener(this);
 btn_4.setOnClickListener(this);
 btn_5.setOnClickListener(this);
 btn_6.setOnClickListener(this);
 btn_7.setOnClickListener(this);
 btn_8.setOnClickListener(this);
 btn_9.setOnClickListener(this);
 btn_minus.setOnClickListener(this);
 btn_multiply.setOnClickListener(this);
 btn_del.setOnClickListener(this);
 btn_divide.setOnClickListener(this);
 btn_point.setOnClickListener(this);
 btn_add.setOnClickListener(this);
 btn_equal.setOnClickListener(this);
 btn_clean.setOnClickListener(this);
 }

 public void onClick(View v) {
 String str = textView.getText().toString();
 switch(v.getId ()){
 case R.id.btn_0:
 case R.id.btn_1:
 case R.id.btn_2:
 case R.id.btn_3:
 case R.id.btn_4:
 case R.id.btn_5:
 case R.id.btn_6:
 case R.id.btn_7:
 case R.id.btn_8:
 case R.id.btn_9:
 case R.id.btn_point:
 if(clear_flag){
  clear_flag=false;
  str="";
  textView.setText ("");
 }
 textView.setText(str+((Button)v).getText ());
 break;

 case R.id.btn_add:
 case R.id.btn_minus:
 case R.id.btn_multiply:
 case R.id.btn_divide:
 if(clear_flag){
  clear_flag=false;
  textView.setText("");
 }
 textView.setText(str+" "+((Button)v).getText()+" ");
 break;
 case R.id.btn_del:
 if(clear_flag){
  clear_flag=false;
  textView.setText ("");
 }else if (str != null && !str.equals ("")){
  textView.setText(str.substring(0,str.length()-1)); //删除一个字符
 }
 break;
 case R.id.btn_clean:
 clear_flag=false;
 str = "";
 textView.setText(""); //清空文本内容
 break;
 case R.id.btn_equal:
 getResult(); //获取结果
 break;
 }
 }

 private void getResult() {  //算法
 String s = textView.getText().toString();
 if(s == null || s.equals ("")){
 return;
 }
 if (!s.contains ("")){
 return;
 }
 if (clear_flag){
 clear_flag=false;
 return;
 }
 clear_flag=true;

 String str1 = s.substring(0,s.indexOf(" "));  // 获取到运算符前面的字符
 String str_y = s.substring(s.indexOf(" ")+1,s.indexOf(" ")+2); //获取到运算符
 String str2 = s.substring(s.indexOf(" ")+ 3);  //获取到运算符后面的字符

 double result = 0;
 if (!str1.equals ("") && !str2.equals ("")){
 double num1 = Double.parseDouble(str1); //将str1、str2强制转化为double类型
 double num2 = Double.parseDouble(str2);

 if (str_y.equals ("+")){
 result = num1 + num2;
 }else if (str_y.equals ("-")){
 result = num1 - num2;
 }else if (str_y.equals ("÷")){
 if (num2 == 0){
  result = 0;
 }else {
  result = num1/num2;
 }
 }else if (str_y.equals ("*")){
 result = num1*num2;
 }
 if (!str1.contains (".") && !str2.contains (".") && !s.equals ("÷")){
 int k = (int) result; //强制转换
 textView.setText (k);
 }else{
 textView.setText (result+"");
 }
 }else if (!str1.equals ("") && str2.equals ("")){
 textView.setText (s);
 }else if (str1.equals ("") && !str2.equals ("")){
 double num2 = Double.parseDouble(str2);
 if (s.equals ("+")){
 result = 0 + num2;
 }else if (s.equals("-")){
 result = 0 - num2;
 }else if (s.equals("×")){
 result = 0;
 }else if (s.equals("÷")){
 result = 0;
 }
 if (!str2.contains (".")) {
 int r = (int) result;
 textView.setText (r + "");
 } else {
 textView.setText (result + "");
 }
 } else {
 textView.setText ("");
 }
 }
}

这里的算法可能写的没有那么好,大家可以网上找找其他案例参照一下,继续完善算法

更多计算器功能实现,请点击专题: 计算器功能汇总 进行学习

关于Android计算器功能的实现,查看专题:Android计算器 进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • Android 九宫格布局详解及实现:人人网应用示例
    本文深入探讨了人人网Android应用中独特的九宫格布局设计,解析其背后的GridView实现原理,并提供详细的代码示例。这种布局方式不仅美观大方,而且在现代Android应用中较为少见,值得开发者借鉴。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • Søren Kierkegaard famously stated that life can only be understood in retrospect but must be lived moving forward. This perspective delves into the intricate relationship between our lived experiences and our reflections on them. ... [详细]
  • 计算机网络复习:第五章 网络层控制平面
    本文探讨了网络层的控制平面,包括转发和路由选择的基本原理。转发在数据平面上实现,通过配置路由器中的转发表完成;而路由选择则在控制平面上进行,涉及路由器中路由表的配置与更新。此外,文章还介绍了ICMP协议、两种控制平面的实现方法、路由选择算法及其分类等内容。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • 线性Kalman滤波器在多自由度车辆悬架主动控制中的应用研究
    本文探讨了线性Kalman滤波器(LKF)在不同自由度(2、4、7)的车辆悬架系统中进行主动控制的应用。通过详细的仿真分析,展示了LKF在提升悬架性能方面的潜力,并总结了调参过程中的关键要点。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
  • MySQL中枚举类型的所有可能值获取方法
    本文介绍了一种在MySQL数据库中查询枚举(ENUM)类型字段所有可能取值的方法,帮助开发者更好地理解和利用这一数据类型。 ... [详细]
  • 本文详细探讨了在Android 8.0设备上使用ChinaCock的TCCBarcodeScanner进行扫码时出现的应用闪退问题,并提供了解决方案。通过调整配置文件,可以有效避免这一问题。 ... [详细]
author-avatar
手机用户2502939965
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有