简单计算器

1、写在前面的话

这是我第一次开始写技术博客,从业两年有余,都是在看前辈们的博客中成长的,从中受益匪浅。不仅使自己的技术有了提高,更多的帮我解决了工作中遇到的很多问题。本着回馈的心态,同时为了自己能够更好的理解和学习,所以开始着手写一些技术类博客。其实很早就听前辈们说了,写博客对自我的提高是很有帮助的。现在,终于开始了我的第一篇博客。

2、先上效果图片

android stdio 小项目 android简单小项目实例_android stdio 小项目

3、项目说明

我也是机缘巧合想到了要写这个计算器的,因为正好是在看TableLayout表格布局,又发现公司测试机上自带的计算器实在是不敢恭维。

功能描述:实现基本的计算器功能(加,减,乘,除)。

UI布局:整体使用GridLayout来布局,每个按键一个Button,使用TextView来显示输入和计算结果。

问为什么选择 GridLayout来布局?

从效果图大家可以看得出,是运用Android中表格布局的一个好地方。Android中有表格布局效果的有三个TableLayout, GridLayout,GridView;具体的我就不介绍了,大家可以搜索,就个人理解的来说说对他们的使用。

TableLayout:起初五大布局之一,提供了行和列的收缩功能,也可以合并两个列。但是我并没有找到合并行的方法。

GridLayout:话说是从4.0才开始有的,完美的提供了行和列的合并。但是据官方提供的说明中指出的它的局限,没有提供类似weight的方法和属性,无法均匀的平分屏幕的空间。这是在计算器项目中布局遇到的最大经瓶;有个gravity属性可以使用水平或者垂直上的fill,但是只对最后一个有效果。

GridView:是AdapterView 的子类,需要使用适配器。貌似没有行和列的合并,至少我没有找到方法。

如何解决按钮水平方向平均填充屏幕?

在百度无果的情况下,解决问题还得是Google。从搜索到的资料来看,直接通过 GridLayout属性或者方法来解决的没有找到。也猜想肯定有牛人会CustomGridLayout,有看到过一个帖子,但是我没有去细看。因为有人提出了和我们遇到的同样的问题,但是全部是英文啊,作为程序员英语永远是硬伤。上上下下看了两三遍,综合了两个牛人介绍的方法,算是找到了一个解决方案。就是手动根据 GridLayout的情况将每个按钮进行拉伸。具体操作看下面的代码:

缩放每个Item使其水平均匀充满全屏

private void fillview(GridLayout gl) {
		Button buttontemp;
		GridLayout.LayoutParams params;

		for (int i = 0; i < gl.getChildCount(); i++) {
			buttontemp = (Button) gl.getChildAt(i);
			params = (LayoutParams) buttontemp.getLayoutParams();
			params.width = (gl.getWidth() / gl.getColumnCount())
					- params.rightMargin - params.leftMargin;
			buttontemp.setLayoutParams(params);
		}

	}

// 动态的设置Gridlayout中控件的宽度,使其全屏匹配屏幕
		GridLayout gridlayout = (GridLayout) findViewById(R.id.gridlayout_c);
		ViewTreeObserver vto = gridlayout.getViewTreeObserver();
		vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
			public void onGlobalLayout() {
				GridLayout gl = (GridLayout) findViewById(R.id.gridlayout_c);
				fillview(gl);

				ViewTreeObserver obs = gl.getViewTreeObserver();
				obs.removeGlobalOnLayoutListener(this);
			}
		});

以上是布局中遇到的问题。ViewTreeObserver 本人也不是能了解,只知道通过这个方法可以实现我们要的效果。具体的过程还需要以后研究。

在计算器的功能逻辑实现方面,网络上应该有许多成熟的方案,我没有去查找。是自己想的一个实现方式,算法方面还有许多完善的地方。最复杂的功能就是去计算各种结果,由于时间上的关系,在最后要实现混合多运算时下班了,也就先暂时推迟一段时间再来实现吧。基本的功能都已经完成。代码会在近期上传(代码在公司需要周一才好上传),请读者留意及时查看。

4、总结

整体来说计算器项目不是很难, 第一篇博文结束,代码稍后奉上。再次感谢这些年看过的正在看的那些博客中带效果图片和源码的博主们。