日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

自定义计算器 android,Android 简单计算器的实现

發(fā)布時(shí)間:2023/12/10 Android 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自定义计算器 android,Android 简单计算器的实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

計(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。