Android小項目之計算器

簡單計算器

1、寫在前面的話
這是我第一次開始寫技術博客,從業兩年有餘,都是在看前輩們的博客中成長的,從中受益匪淺。不僅使自己的技術有了提高,更多的幫我解決了工作中遇到的很多問題。本着回饋的心態,同時爲了自己能夠更好的理解和學習,所以開始着手寫一些技術類博客。其實很早就聽前輩們說了,寫博客對自我的提高是很有幫助的。現在,終於開始了我的第一篇博客。

2、先上效果圖片


3、項目說明
我也是機緣巧合想到了要寫這個計算器的,因爲正好是在看TableLayout表格佈局,又發現公司測試機上自帶的計算器實在是不敢恭維。
功能描述:實現基本的計算器功能(加,減,乘,除)。
UI佈局:整體使用GridLayout來佈局,每個按鍵一個Button,使用TextView來顯示輸入和計算結果。

問爲什麼選擇GridLayout來佈局
從效果圖大家可以看得出,是運用Android中表格佈局的一個好地方。Android中有表格佈局效果的有三個TableLayout,GridLayout,GridView;具體的我就不介紹了,大家可以搜索,就個人理解的來說說對他們的使用。
TableLayout:起初五大布局之一,提供了行和列的收縮功能,也可以合併兩個列。但是我並沒有找到合併行的方法。
GridLayout話說是從4.0纔開始有的,完美的提供了行和列的合併。但是據官方提供的說明中指出的它的侷限,沒有提供類似weight的方法和屬性,無法均勻的平分屏幕的空間。這是在計算器項目中佈局遇到的最大經瓶;有個gravity屬性可以使用水平或者垂直上的fill,但是隻對最後一個有效果。
GridView:是AdapterView 的子類,需要使用適配器。貌似沒有行和列的合併,至少我沒有找到方法。

如何解決按鈕水平方向平均填充屏幕?
在百度無果的情況下,只好在公司翻牆Google了,解決問題還得是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、總結
整體來說計算器項目不是很難, 第一篇博文結束,代碼稍後奉上。再次感謝這些年看過的正在看的那些博客中帶效果圖片和源碼的博主們。

源碼下載地址:http://download.csdn.net/detail/huohuo5753/8166703
這裏有一篇寫計算器算法的文章,寫的很好大家可以看看:http://blog.csdn.net/xiangang12202/article/details/38491545


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章