自定义计算器 android,Android 简单计算器的实现
計(jì)算器
計(jì)算器App看似簡(jiǎn)單,實(shí)現(xiàn)起來(lái)卻是不那么簡(jiǎn)單。對(duì)于android新手來(lái)說(shuō),計(jì)算器是一個(gè)很好的練手的小項(xiàng)目。對(duì)于android的一些基礎(chǔ)知識(shí)和一些算法邏輯是一個(gè)很好的鍛煉。
功能
基本計(jì)算器的加減乘除運(yùn)算、歷史記錄、連續(xù)運(yùn)算。
想法
計(jì)算器按鍵布局方式
添加button點(diǎn)擊事件
字符串邏輯處理
布局
布局采用LinearLayout,采用layout_weight進(jìn)行均等分是一個(gè)不錯(cuò)的方式。此計(jì)算器我采用了自定義按鈕(其實(shí)也就是導(dǎo)入字體使按鈕的文字顯示比較不同),這樣會(huì)遇到一個(gè)問題就是一些運(yùn)算符號(hào)比如”+-“我導(dǎo)入的字體沒有的,它就還是以正常的方式顯示出來(lái),這就會(huì)顯得不協(xié)調(diào)了。當(dāng)然這個(gè)問題可以把按鈕設(shè)置為ImageView而不是TextView,直接到如相應(yīng)樣式的按鈕圖片就行了。這時(shí)你得注意ImageView應(yīng)采用的是src索引資源文件而不是background,這樣才不會(huì)造成適配問題按鈕圖片拉伸的問題。
為按鈕添加點(diǎn)擊事件
添加點(diǎn)擊事件有兩種方式,一種是繼承OnClickListener接口并實(shí)現(xiàn)onClick(View v)方法,一種是直接為button添加點(diǎn)擊事件;
public class MainActivity extends Activity implements OnClickListener{
//計(jì)算器按鈕定義
Button btn_0;
...
btn_0.setOnClickListener(this);
...
@Override
public void onClick(View v) {
switch(v.getId()){
//當(dāng)點(diǎn)擊數(shù)字、小數(shù)點(diǎn)時(shí)
case R.id.bt_0 :
...
}
寫到這里我又想起了Jay跟我說(shuō)的,大致是這樣說(shuō)的 (⊙o⊙)…
布局就是把View一層層疊起來(lái)的,就如我們書桌上的課本一樣,一本疊著一本,有些是容器,可以在里面在放一些東西,也就是繼承ViewGroup的View,有一些則不能再放了。這些View要怎么放就靠你的LinearLayout,RelativeLayout等布局方式了
這在以后會(huì)遇到的view的事件傳遞的一些問題是一個(gè)很好的理解基礎(chǔ)。android的事件傳遞機(jī)制
字符串邏輯處理
點(diǎn)擊按鈕通過(guò)TextView的getText()方法得到字符串并顯示在顯示欄上,顯示欄其實(shí)同樣也是一個(gè)TextView。這里最為重要的是對(duì)輸入的字符串的處理。
①輸入字符的判斷
②拼接而成的字符串是否是正確的數(shù)學(xué)運(yùn)算式
③如何實(shí)現(xiàn)特殊運(yùn)算,如連乘,求根等
④必要的標(biāo)志位
//標(biāo)志位
boolean calculate_flag = false;//是否已經(jīng)具備數(shù)學(xué)計(jì)算條件?——eg.具有"5 + "字符串格式?
boolean recordFlag = false;//記錄數(shù)據(jù)傳遞標(biāo)志,傳到RecordActivity,只存儲(chǔ)數(shù)據(jù)直接返回。
boolean re_flag = false;//清除歷史動(dòng)作數(shù)據(jù)標(biāo)志
boolean zf_flag = false;//正負(fù)切換標(biāo)志
boolean mFlag = false;//開啟并停留RecordActivity標(biāo)志位
```
我在這里把字符運(yùn)算符前后都加入一" ",把輸入的運(yùn)算字符串傳入一函數(shù)運(yùn)算器進(jìn)行字符判斷找出分開數(shù)值與運(yùn)算符,再進(jìn)行數(shù)值運(yùn)算
``` java
/* * 運(yùn)算器 */
private String calculator(){
//在運(yùn)算符兩邊加入" ", 如" + "判斷運(yùn)算符,計(jì)算數(shù)據(jù)
float result = 0;
String exp = inputText.getText().toString();
String sResult;
if(exp == null || exp.equals("") ||
!exp.contains(" "))
return "";
float s1 = Float.parseFloat(exp.substring(0, exp.indexOf(" ")));//運(yùn)算符前面的數(shù)
String op = exp.substring(exp.indexOf(" ")+1, exp.indexOf(" ")+2);//運(yùn)算符
float s2 = Float.parseFloat(exp.substring(exp.indexOf(" ")+3));//運(yùn)算符后面的數(shù)
...
}
其他運(yùn)算直接取結(jié)果欄的字符再進(jìn)行運(yùn)算就可以了,此計(jì)算器連續(xù)運(yùn)算也只是取結(jié)果欄的結(jié)果并與輸入欄結(jié)果進(jìn)行運(yùn)算而成,并沒有更為復(fù)雜的字符串判斷。
總結(jié)
這次計(jì)算器的設(shè)計(jì)最為重要的是對(duì)字符串的處理,在實(shí)際編程中會(huì)遇到各種要考慮的情況。比如在如何字符串中查找得到運(yùn)算符號(hào),運(yùn)算公式的合法與否。
總結(jié)
以上是生活随笔為你收集整理的自定义计算器 android,Android 简单计算器的实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云openapi接口使用,PHP,视
- 下一篇: Android打开系统文件管理器