Android系列案例2:android开发简易计算器

阶段1:进行计算器的界面布局View,activity_main.xml文件如下:







 
  
 
    
     



阶段2:编写计算器的业务逻辑类Model:CalculatorBiz

/**
 * 模型层M:运算器业务逻辑类
 * @author jg
 */
public class CalculatorBiz {
	public double add(double num1, double num2) {
		return num1 + num2;
	}

	public double sub(double num1, double num2) {
		return num1 - num2;
	}

	public double mulitply(double num1, double num2) {
		return num1 * num2;
	}

	public double divide(double num1, double num2) {
		return num1 / num2;
	}
}

 

阶段3:编写Activity,查找组件并进行事件处理

public class MainActivity extends Activity {
	private EditText num1Text;// 操作数1文本框
	private EditText num2Text;// 操作数2文本框
	private TextView opText;// 运算符组件
	private TextView result;// 存放结果的组件
	private Button add;// 加法按钮组件
	private Button sub;// 减法按钮组件
	private Button multiply;// 乘法按钮组件
	private Button divide;// 除法按钮组件

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initialComponent();
		registerListener();

	}

	/**
	 * 自定义初始化组件的方法
	 */
	private void initialComponent() {
		num1Text = (EditText) this.findViewById(R.id.num1);
		num2Text = (EditText) this.findViewById(R.id.num2);
		opText = (TextView) this.findViewById(R.id.op);
		result = (TextView) this.findViewById(R.id.result);
		add = (Button) this.findViewById(R.id.add);
		sub = (Button) this.findViewById(R.id.sub);
		multiply = (Button) this.findViewById(R.id.multiply);
		divide = (Button) this.findViewById(R.id.divide);
	}

	/**
	 * 注册事件监听器
	 */
	private void registerListener() {
		add.setOnClickListener(new ButtonHandler());
		sub.setOnClickListener(new ButtonHandler());
		multiply.setOnClickListener(new ButtonHandler());
		divide.setOnClickListener(new ButtonHandler());
	}

	/**
	 * 定义事件处理类
	 */
	private class ButtonHandler implements OnClickListener {

		@Override
		public void onClick(View v) {
			String num1String = num1Text.getText().toString();
			String num2String = num2Text.getText().toString();
			CalculatorBiz calculatorBiz = new CalculatorBiz();
			// 判断究竟是点击了哪个按钮
			switch (v.getId()) {
			case R.id.add:
				opText.setText("+");
				result.setText(""
						+ format(calculatorBiz.add(
								Double.parseDouble(num1String),
								Double.parseDouble(num2String))));
				break;
			case R.id.sub:
				opText.setText("-");
				result.setText(""
						+ format(calculatorBiz.sub(
								Double.parseDouble(num1String),
								Double.parseDouble(num2String))));
				break;
			case R.id.multiply:
				opText.setText("*");
				result.setText(""
						+ format(calculatorBiz.mulitply(
								Double.parseDouble(num1String),
								Double.parseDouble(num2String))));
				break;
			case R.id.divide:
				if ("0".trim().equals(num2String)) {
					result.setText("");
					Toast.makeText(MainActivity.this, "除数不能为0",
							Toast.LENGTH_LONG).show();
					break;
				}
				opText.setText("/");
				result.setText(""
						+ format(calculatorBiz.divide(
								Double.parseDouble(num1String),
								Double.parseDouble(num2String))));
				break;
			default:
				break;
			}

		}

	}

	/**
	 * 
	 * @param result
	 * @return 格式化后的字符串
	 */
	private String format(double result) {
		DecimalFormat df = new DecimalFormat("0.00");
		return "" + df.format(result);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

}

 

阶段4:给计算器添加Menu,当点击菜单按钮式会弹出菜单选项

方式1:通过XML布局来实现



    
    


在Activity中需要重写如下方法:

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}


方式2:手动创建菜单

         @Override
	public boolean onCreateOptionsMenu(Menu menu) {
		/*
		 * getMenuInflater().inflate(R.menu.activity_main, menu); return true;
		 */
		menu.add(0, 0, 0, R.string.about);
                  // 第一个参数为组号,便于对整个组进行操作;第二个参数为菜单的ID,为了标识菜单项;第三个参数为显示顺序
		menu.add(0, 1, 1, R.string.exit);
		return true;
	}

groupId的用处:

menu.removeGroup(group1); //删除一组菜单
menu.setGroupVisible(gourp2, visible); //设置一组菜单是否可见
menu.setGroupEnabled(gourp2, enabled); //设置一组菜单是否可点

对菜单点击事件进行事件处理

        /**
	 * 当点击菜单项时调用此方法
	 */
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int itemId=item.getItemId();//获取菜单项的唯一编号
		switch (itemId) {
		case MENU_ABOUT:
			AlertDialog.Builder alertDialog=new AlertDialog.Builder(this);
			alertDialog.setIcon(android.R.drawable.ic_menu_help);//引用系统自带的图标
			alertDialog.setTitle(R.string.about);//给对话框设置标题
			alertDialog.setMessage(R.string.info);//设置对话框的提示信息
			alertDialog.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
				
				@Override
				public void onClick(DialogInterface dialog, int which) {
					Toast.makeText(MainActivity.this, "欢迎你的使用", Toast.LENGTH_LONG).show();
				}
			});
			alertDialog.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
				
				@Override
				public void onClick(DialogInterface dialog, int which) {
				}
			});
			alertDialog.create().show();
			break;
		case MENU_EXIT:
			this.finish();//退出应用程序
		default:
			break;
		}
		return true;
	}

运行效果如下图所示:

 


 other:引用android自带的图标库见

http://www.cnblogs.com/qingblog/archive/2012/06/08/2541555.html 

你可能感兴趣的:(Android系列案例2:android开发简易计算器)