找传奇、传世资源到传世资源站!

android_计算器_例子源码下载_

8.5玩家评分(1人评分)
下载后可评
介绍 评论 失效链接反馈

android 计算器

package etu.ecjtu.calculater;

import org.hemingway.calculater.R;

import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;

public class CalculaterMain extends Activity implements View.OnClickListener {
	private EditText output;
	private EditText input;
	private Button btn0;
	private Button btn1;
	private Button btn2;
	private Button btn3;
	private Button btn4;
	private Button btn5;
	private Button btn6;
	private Button btn7;
	private Button btn8;
	private Button btn9;
	private Button btnadd;
	private Button btnsubtract;
	private Button btnmultiply;
	private Button btndivide;
	private Button btnclear;
	private Button btnresult;

	private String str;// 保存数字
	private String strold;
	private char act;// 记录符号
	private int count;// 判断要计算的次数,如果超过一个符号,先算出来一部分
	private int result;// 计算的结果

	private int err;// 无错误的时候为0
	private int flag;// 一个标志,如果为1,可以响应运算消息,如果为0,不响应运算消息,只有前面是数字才可以响应运算消息
	private int flag2;// 一个标志,如果为1,可以响应数字输入,如果为0,清屏!
	Button[] b = new Button[16]; // 存储键盘ID
	private int index = 0; // 设置用来轮流切换

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		output = (EditText) findViewById(R.id.output);
		input = (EditText) findViewById(R.id.input);
		btn0 = (Button) findViewById(R.id.zero);
		btn1 = (Button) findViewById(R.id.one);
		btn2 = (Button) findViewById(R.id.two);
		btn3 = (Button) findViewById(R.id.three);
		btn4 = (Button) findViewById(R.id.four);
		btn5 = (Button) findViewById(R.id.five);
		btn6 = (Button) findViewById(R.id.six);
		btn7 = (Button) findViewById(R.id.seven);
		btn8 = (Button) findViewById(R.id.eight);
		btn9 = (Button) findViewById(R.id.nine);
		btnadd = (Button) findViewById(R.id.add);
		btnsubtract = (Button) findViewById(R.id.subtract);
		btnmultiply = (Button) findViewById(R.id.multiply);
		btndivide = (Button) findViewById(R.id.divide);
		btnclear = (Button) findViewById(R.id.clear);
		btnresult = (Button) findViewById(R.id.result);

		btn0.setOnClickListener(this);
		btn1.setOnClickListener(this);
		btn2.setOnClickListener(this);
		btn3.setOnClickListener(this);
		btn4.setOnClickListener(this);
		btn5.setOnClickListener(this);
		btn6.setOnClickListener(this);
		btn7.setOnClickListener(this);
		btn8.setOnClickListener(this);
		btn9.setOnClickListener(this);
		btnadd.setOnClickListener(this);
		btnsubtract.setOnClickListener(this);
		btnmultiply.setOnClickListener(this);
		btndivide.setOnClickListener(this);
		btnclear.setOnClickListener(this);
		btnresult.setOnClickListener(this);

		act = ' '; // = - * / 判断
		str = ""; // 输入
		strold = "";// 存储原输入
		count = 0; // 计算次数
		result = 0;// 输出
		err = 0;// 处理异常,默认无异常
		flag = 0;// 默认不能响应,按下第一个数字后改为1,可以响应
		flag2 = 1; // 默认为1。计算result后改为0,不可以响应num,只可以响应act;
		int[] btn = { R.id.add, R.id.clear, R.id.divide, R.id.multiply,
				R.id.subtract, R.id.result, R.id.zero, R.id.one, R.id.two,
				R.id.three, R.id.four, R.id.five, R.id.six, R.id.seven,
				R.id.eight, R.id.nine };
		for (int i = 0; i < btn.length; i ) {
			b[i] = (Button) findViewById(btn[i]);
		}
	}

	/**
	 * 点击按钮 获取输入
	 */
	public void onClick(View view) {
		// TODO Auto-generated method stub

		switch (view.getId()) {
		case R.id.zero:
			num(0);
			break;
		case R.id.one:
			num(1);
			break;
		case R.id.two:
			num(2);
			break;
		case R.id.three:
			num(3);
			break;
		case R.id.four:
			num(4);
			break;
		case R.id.five:
			num(5);
			break;
		case R.id.six:
			num(6);
			break;
		case R.id.seven:
			num(7);
			break;
		case R.id.eight:
			num(8);
			break;
		case R.id.nine:
			num(9);
			break;

		case R.id.add:
			add();
			break;
		case R.id.subtract:
			sub();
			break;
		case R.id.multiply:
			multiply();
			break;
		case R.id.divide:
			divide();
			break;
		case R.id.clear:
			clear();
			break;
		case R.id.result:
			result();
			if (err != 1 && flag != 0) // 无异常,可响应输入
				output.setText(String.valueOf(result)); // 输出显示
			break;
		default:
			break;
		}
		input.setText(strold  act  str); // 设置输入显示
	}

	/**
	 * 读取输入的数字
	 * 
	 * @param n
	 */
	public void num(int n) {
		if (flag2 == 0) { // 已经计算结果
			clear(); // 清屏
			flag = 1;// 设置可响应运算
		} else {
			str = str  String.valueOf(n);// 非计算结果,可响应数字
			flag = 1; // 设置可响应运算
		}
	}

	/**
	 * 加法计算
	 */
	public void add() {
		if (flag != 0) { // 可响应 运算
			check(); // 判断
			act = ' ';
			flag = 0; // 设置不可响应运算
			flag2 = 1;// 设置可响应数字输入
		}
	}

	/**
	 * 减法计算
	 */
	public void sub() {
		if (flag != 0) {
			check();
			act = '-';
			flag = 0;
			flag2 = 1;
		}
	}

	/**
	 * 乘法计算
	 */
	public void multiply() {
		if (flag != 0) {
			check();
			act = '*';
			flag = 0;
			flag2 = 1;
		}
	}

	/**
	 * 除法计算
	 */
	public void divide() {
		if (flag != 0) {
			check();
			act = '/';
			flag = 0;
			flag2 = 1;
		}
	}

	/**
	 * 清屏
	 */
	public void clear() {
		str = strold = "";
		count = 0;
		act = ' ';
		result = 0;
		err = 0; // 无异常
		flag = 0; // 设置可响应运算
		flag2 = 1;// 设置可响应数字输入
		input.setText(strold  act  str);
		output.setText("");
	}

	/**
	 * 检查
	 */
	public void check() {
		if (count >= 1) { // 如果有运算
			result(); // 计算结果
			str = String.valueOf(result);
		}
		strold = str;
		str = "";
		count ;
	}

	/**
	 * 计算结果
	 */
	public void result() {
		int a, b;
		a = Integer.parseInt(strold);
		b = Integer.parseInt(str);
		if (flag != 0) { // 可以响应运算
			if (b == 0 && act == '/') { // 除数为0,并且是除法运算
				clear();
				output.setText("除数不能为零!按C键重新计算");
				err = 1;// 异常
			}
			result = 0;
			if (err != 1) { // 无异常
				switch (act) {
				case ' ':
					result = a  b;
					break;
				case '-':
					result = a - b;
					break;
				case '*':
					result = a * b;
					break;
				case '/':
					result = a / b;
					break;
				default:
					break;
				}
			}
		}
		flag2 = 0; // 运算后,设置不可响应数字输入
	}

	public void onConfigurationChanged(Configuration newConfig) {
		if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
			// 横向
			setContentView(R.layout.main);
		} else {
			// 竖向
			setContentView(R.layout.main);
		}

	}

	/**
	 * 更改键盘顺序(方法未写)
	 */
	public void changeLocation() {

	}

	/**
	 * 更改键盘颜色
	 */
	public void setColor(int t) {
		for (int i = 0; i < b.length; i ) {
			b[i].setBackgroundResource(t);
		}
	}

	/**
	 * 设置键盘颜色(3种轮流切换)
	 * 
	 * @param index
	 */
	public void changeColor(int index) {
		switch (index) {
		case 0:
			// setColor(0x9400D3);//无法设置 不知原因
			break;
		case 1:
			// setColor(0x00FF00);
			break;
		case 2:
			// setColor(0xB4CDCD);
			break;
		default:
			break;
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		super.onCreateOptionsMenu(menu);
		SubMenu subMenu = menu.addSubMenu(1, 0, 1, "系统设置");// 主菜单
		MenuItem menuItem = subMenu.add(2, 1, 1, "更换键盘背景");// 子菜单
		subMenu.add(2, 2, 2, "更改键盘顺序");
		menu.addSubMenu(1, 3, 2, "退出"); // 主菜单
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		// 响应每个菜单项(通过菜单项的ID)
		case 0:
			Toast.makeText(getApplicationContext(), "您选择了系统设置",
					Toast.LENGTH_LONG).show();
			break;
		case 1:
			Toast.makeText(getApplicationContext(), "您选择了更换键盘背景",
					Toast.LENGTH_LONG).show();
			changeColor(index);
			index ;
			break;
		case 2:
			Toast.makeText(getApplicationContext(), "您选择了更换键盘顺序",
					Toast.LENGTH_LONG).show();
			changeLocation();
			break;
		case 3:
			Toast.makeText(getApplicationContext(), "您选择了退出", Toast.LENGTH_LONG)
					.show();
			System.exit(0);
			break;
		default:
			// 对没有处理的事件,交给父类来处理
			return super.onOptionsItemSelected(item);
		}
		// 返回true表示处理完菜单项的事件,不需要将该事件继续传播下去了
		return true;
	}
}

评论

发表评论必须先登陆, 您可以 登陆 或者 注册新账号 !


在线咨询: 问题反馈
客服QQ:174666394

有问题请留言,看到后及时答复