900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 基于Android平台的简易计算器 基于Andriod的简易计算器

基于Android平台的简易计算器 基于Andriod的简易计算器

时间:2022-07-30 05:20:02

相关推荐

基于Android平台的简易计算器 基于Andriod的简易计算器

这学期有安卓这门课,这里做了一个简易的计算器,实现了两位数加减乘除的基本功能,比较简单适合用来入门学习。

运行效果

预备知识

实现这个计算器之前要先了解实现计算器需要的基本组件

1.TextView

TextView是一个文本显示组件,提供了基本的显示文本功能,因为大多数UI系统组件都需要展示信息,所有它也是大多数UI系统组件的父类。

(1)TextView的常用属性和方法

属性名

对应方法

说明

android:autoLink

setAutoLinkMask(int)

设置是否当文本为:URL链接、E-mail、电话号码、Map时,文本显示为可单机的链接

android:gravity

setGravity(int)

设置文本框的对应方式

android:layout_gravity

设置组件本身相对于父组件的显示位置

android:lines

setLines(int)

设置文本的行数,设置两行就显示两行,即使第二行没有数据

android:text

setText(CharSequence)

设置文本框显示的文本内容

android:textColor

setTextColor(int)

设置文本显示的颜色

android:textSize

setTextSize(float)

设置文字大小,推荐度量单位"sp"

android:textStyle

setTypeface(Typeface)

设置字形:粗体、斜体等

android:layout_width

设置文本框在屏幕上的宽度

android:layout_height

设置文本框在屏幕上的高度

(2)gravity和layout_gravity的属性值及说明

属性值

说明

top

顶部对齐

bottom

底部对齐

left

左边对齐

right

右边对齐

center_horizontal

横向中央位置对齐

2.Button

Button是TextView的子类,所以TextView上很多属性也可以直接应用到Button上。实际开发中对于Button操作主要是按下后执行何种操作。

(1)Button的常用属性和方法

属性名

对应方法

说明

android:clickable

setClickable(boolean)

设置是否允许点击按钮(true/false)

android:background

setBackgroudResource

通过资源文件设置背景色

android:onClick

setOnClickListener(OnClickListener)

设置点击事件

(2)监听事件

每一个添加到UI上的Button一般都需要给它绑定监听事件,给Button绑定监听事件通常有两类方法:

内部类(匿名内部类、定义内部类)

给Button设置onClick属性(在代码中定义onClick指明的对应方法)

了解完了组件之后还要了解一个布局,才能将组件更好的摆放在界面上。此计算器使用线性布局实现的。

3.LinerLayout

线性布局是 Android 应用程序开发时较为常见的一种布局类型,它可以将用户界面上的组件拜访水平(horizontal)或垂直(vertical)的形式。

LinerLayout的常用属性和对应方法

属性名

对应方法

说明

android:orientation

setOrientation(int)

设置线性布局的方向,有horizontal(水平)和vertical(垂直)两个值,必须设置

android:layout_gravity

设置组件本身相对于父组件的显示位置

android:divider

设置分割线的图片

android:layout_weight

设置权重,即让一行或一列的组件按比例显示

计算器的具体设计与实现

一、主界面设计

根据运行效果可以看出,计算器主要实现了加、减、乘、除的计算功能。

主界面上用11个Button组件显示数字0 9和".",用于输入0 9数字和小数点;

用4个Button组件显示"+"、""、""、""运算符,用于实现加、减、乘、除运算;

用3个Button组件显示"="、"C" 和 "DEL", "=" 用于计算结果、 "C" 用于将显示结果的TextView清零、 "DEL" 用于删除输入的1个字符。

采用嵌套的线性布局

具体结构如下:

整体是一个垂直的线性布局,最上面放置一个TextView,下面是五个水平的线性布局用来放置按钮。

按钮的宽度是用weight权重设置而成,让观感更好。

最外层的线性布局添加了属性 android:layout_margin="8dp" 让布局与边框有了8dp的间隔,也是使观感更好。

二、实例化对象与监听事件

实例化组件对象

创建init函数, 将TextView以及功能性组件通过 this.findViewById(R.id.具体id) 进行实例化。

给对象绑定监听事件

内部类

* 匿名内部类

* 定义内部类

onClick属性

* 定义public类型的方法

数字按键的功能只是显示到TextView中所以使用的是添加onClick属性并指定方法绑定监听事件,功能按键使用的是匿名内部类定义其功能。

三、功能的实现

(1)定义变量和初始化组件

private Button btnAdd, btnDec, btnMul, btnDev, btnEqu, btnClear, btnDel;

private TextView txtResult; //显示结果

private StringBuffer digtalA = new StringBuffer(),digtalB = new StringBuffer();

private boolean isChar = false; //是否为运算符

private int operater = 0; // 判断是哪种运算符 0+ 1- 2* 3/

private boolean isDigtalA = true;

void initView(){

txtResult = (TextView) this.findViewById(R.id.txtResults);

btnAdd = (Button) this.findViewById(R.id.btnAdd);

btnDec = (Button) this.findViewById(R.id.btnDec);

btnMul = (Button) this.findViewById(R.id.btnMul);

btnDev = (Button) this.findViewById(R.id.btnDev);

btnEqu = (Button) this.findViewById(R.id.btnEqu);

btnClear = (Button) this.findViewById(R.id.btnC);

btnDel = (Button) this.findViewById(R.id.btnDel);

}

(2)数字0~9及小数点的监听事件定义了myOnclick()方法来实现

public void myOnclick(View v){

switch (v.getId()){

case R.id.btn0:

setVal("0");

break;

case R.id.btn1:

setVal("1");

break;

//...中间代码省略

case R.id.btnDot:

setVal(".");

break;

}

}

setVal()方法是对重复代码的抽取。

public void setVal(String s){

if (isChar){

digtalB.append(s);

txtResult.setText(digtalB.toString());

}else{

digtalA.append(s);

txtResult.setText(digtalA.toString());

}

}

此代码作用是判断当前输入的数字是运算的第一个数还是第二个数。对其进行赋值(digtalA为StringBuffer存储第一个运算数,B存储第二个运算数)并显示到TextView中。

(3)运算法"+"的监听事件

btnAdd.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

if (digtalA.length() == 0){

return;

}

operater = 0;

isChar = true;

isDigtalA = false;

txtResult.setText("+");

}

});

减乘除与其类似。

(4)清空按钮 "C" 的监听事件

btnClear.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

digtalA = new StringBuffer();

digtalB = new StringBuffer();

isChar = false;

isDigtalA = true;

txtResult.setText("0");

}

});

(5)等于号 "=" 的监听事件

btnEqu.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

if (digtalA.length() == 0 || digtalB.length() == 0){

return;

}

float a = Float.parseFloat(digtalA.toString());

float b = Float.parseFloat(digtalB.toString());

float c = 0;

switch (operater){

case 0:

c = a + b;

break;

case 1:

c = a - b;

break;

case 2:

c = a * b;

break;

case 3:

c = a / b;

break;

}

txtResult.setText(c+"");

digtalA = new StringBuffer();

digtalB = new StringBuffer();

isChar = false;

isDigtalA = true;

}

});

}

先判断两个运算数是否为空,为空直接返回,再进行相应的加减乘除操作,将结果显示到屏幕中,并清空A,B及其他标识符。

(6)退格删除 "DEL" 的监听事件

btnDel.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

if (isDigtalA){

if (digtalA.length() > 0){

String temp = digtalA.substring(0,digtalA.length()-1);

digtalA = new StringBuffer();

digtalA.append(temp);

txtResult.setText(digtalA.toString());

}else{

digtalA = new StringBuffer();

digtalA.append("0");

}

}else{

if (digtalB.length() > 0){

String temp = digtalB.substring(0,digtalB.length()-1);

digtalB = new StringBuffer();

digtalB.append(temp);

txtResult.setText(digtalB.toString());

}else{

digtalB = new StringBuffer();

digtalB.append("0");

}

}

}

});

isDigtalA 是用来判断当前输入数字是第一个运算数还是第二个,退格用StringBuffer的substring截断最后一位数字。

(7)其他说明

单位

说明

px(像素)

相当于实际屏幕的像素,由于不同屏幕的像素数差异比较大,因此这个单位不推荐用于尺寸单位

dp/dip(密度无关像素)

一种与屏幕密度无关的尺寸单位,当屏幕密度是160dpi时,1dp=1px。当运行在高dpi的屏幕上时,dp就会按比例放大,当运行在低dpi的屏幕上时,dp就会按比例缩小。因此dp是一种简单解决view在不同大小屏幕上显示问题的解决方案

sp

与dp相似,但是它会随着用户对系统字体大小的设置进行比例缩放,即它能够跟随用户系统字体大小变化。所以它更适合作为字体大小的单位

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