Android實現簡單的計算器
阿新 • • 發佈:2019-01-03
android的佈局和配置檔案
1.下面就是android實現的計算器的佈局配置,可以看見基本是線性佈局,這樣的好處是介面簡潔明瞭
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <!-- 任務: 要求datapick,監聽使用者選擇的日期 --> <!-- android:inputType="text" --> <EditText android:layout_width="280dp" android:layout_height="80dp" android:background="@android:drawable/edit_text" android:inputType="text" android:id="@+id/result" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:layout_width="70dp" android:layout_height="60dp" android:text="@string/c_ce" android:id="@+id/c_ce" /> <Button android:layout_width="70dp" android:layout_height="60dp" android:text="@string/c_c" android:id="@+id/c_c" /> <Button android:layout_width="70dp" android:layout_height="60dp" android:text="@string/c_xx" android:id="@+id/c_xx" /> <Button android:layout_width="70dp" android:layout_height="60dp" android:text="@string/c_div" android:id="@+id/c_div" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:layout_width="70dp" android:layout_height="60dp" android:text="@string/c_7" android:id="@+id/c_7" /> <Button android:layout_width="70dp" android:layout_height="60dp" android:text="@string/c_8" android:id="@+id/c_8" /> <Button android:layout_width="70dp" android:layout_height="60dp" android:text="@string/c_9" android:id="@+id/c_9" /> <Button android:layout_width="70dp" android:layout_height="60dp" android:text="@string/c_X" android:id="@+id/c_X" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:layout_width="70dp" android:layout_height="60dp" android:text="@string/c_4" android:id="@+id/c_4" /> <Button android:layout_width="70dp" android:layout_height="60dp" android:text="@string/c_5" android:id="@+id/c_5" /> <Button android:layout_width="70dp" android:layout_height="60dp" android:text="@string/c_6" android:id="@+id/c_6" /> <Button android:layout_width="70dp" android:layout_height="60dp" android:text="@string/c_delete" android:id="@+id/c_delete" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:layout_width="70dp" android:layout_height="60dp" android:text="@string/c_1" android:id="@+id/c_1" /> <Button android:layout_width="70dp" android:layout_height="60dp" android:text="@string/c_2" android:id="@+id/c_2" /> <Button android:layout_width="70dp" android:layout_height="60dp" android:text="@string/c_3" android:id="@+id/c_3" /> <Button android:layout_width="70dp" android:layout_height="60dp" android:text="@string/c_add" android:id="@+id/c_add" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:layout_width="70dp" android:layout_height="60dp" android:text="@string/c_aord" android:id="@+id/c_aord" /> <Button android:layout_width="70dp" android:layout_height="60dp" android:text="@string/c_0" android:id="@+id/c_0" /> <Button android:layout_width="70dp" android:layout_height="60dp" android:text="@string/c_point" android:id="@+id/c_point" /> <Button android:layout_width="70dp" android:layout_height="60dp" android:text="@string/c_equal" android:id="@+id/c_equal" /> </LinearLayout> </LinearLayout>
2.按鈕對應的字串配置:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">計算器</string> <string name="action_settings">Settings</string> <string name="c_ce">CE</string> <string name="c_c">C</string> <string name="c_xx">Xx</string> <string name="c_div">÷</string> <string name="c_7">7</string> <string name="c_8">8</string> <string name="c_9">9</string> <string name="c_X">X</string> <string name="c_4">4</string> <string name="c_5">5</string> <string name="c_6">6</string> <string name="c_delete">-</string> <string name="c_1">1</string> <string name="c_2">2</string> <string name="c_3">3</string> <string name="c_add">+</string> <string name="c_aord">±</string> <string name="c_0">0</string> <string name="c_point">·</string> <string name="c_equal">=</string> </resources>
實現的介面效果如下
3.具體操作細節:
這裡由於是個練習沒有按照很嚴格的分類但功能基本實現了:
以下是邏輯需要用運算介面和加減乘除演算法:
package com.example.control;
public interface Calculate {
/**
* 計算的方法
* @param x 輸入的要被計算的引數x
* @param y 輸入的要被計算的引數y
*/
public float calculate(double x,double y);
}
package com.example.control; public class Add implements Calculate{ @Override public float calculate(double x, double y) { return (float) (x+y); } }
package com.example.control;
public class Delete implements Calculate{
public float calculate(double x, double y) {
return (float) (x-y);
}
}
package com.example.control;
public class Mulitply implements Calculate{
public float calculate(double x, double y) {
return (float) (x*y);
}
}
package com.example.control;
public class Div implements Calculate{
public float calculate(double x, double y) {
if(y==0){
try {
throw new Exception("被除數不能為0");
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
return (float) (x/y);
}
}
以上這些供具體使用的時候呼叫
4.以下為activity和監聽的內容:
package com.example.caculate;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.control.Add;
import com.example.control.Calculate;
import com.example.control.Delete;
import com.example.control.Div;
import com.example.control.Mulitply;
public class MainActivity extends Activity {
private float x,y;
private String text="";
private int tagremeber=0;
private EditText textview;
private boolean eqstatus=false;
private boolean zestatus=false;
private int count=0;
private Calculate cl;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textview=(EditText) findViewById(R.id.result);
textview.setText("0.0");
textview.requestFocus();
Button bt_0=(Button) findViewById(R.id.c_0);
Button bt_1=(Button) findViewById(R.id.c_1);
Button bt_2=(Button) findViewById(R.id.c_2);
Button bt_3=(Button) findViewById(R.id.c_3);
Button bt_4=(Button) findViewById(R.id.c_4);
Button bt_5=(Button) findViewById(R.id.c_5);
Button bt_6=(Button) findViewById(R.id.c_6);
Button bt_7=(Button) findViewById(R.id.c_7);
Button bt_8=(Button) findViewById(R.id.c_8);
Button bt_9=(Button) findViewById(R.id.c_9);
Button bt_add=(Button) findViewById(R.id.c_add);
Button bt_delete=(Button) findViewById(R.id.c_delete);
Button bt_mul=(Button) findViewById(R.id.c_X);
Button bt_div=(Button) findViewById(R.id.c_div);
Button bt_c=(Button) findViewById(R.id.c_c);
Button bt_xx=(Button) findViewById(R.id.c_xx);
Button bt_ce=(Button) findViewById(R.id.c_ce);
Button bt_aord=(Button) findViewById(R.id.c_aord);
Button bt_equal=(Button) findViewById(R.id.c_equal);
Button bt_point=(Button) findViewById(R.id.c_point);
//其中1-10為數字 11-20位運算子
bt_0.setTag(20);
bt_1.setTag(1);
bt_2.setTag(2);
bt_3.setTag(3);
bt_4.setTag(4);
bt_5.setTag(5);
bt_6.setTag(6);
bt_7.setTag(7);
bt_8.setTag(8);
bt_9.setTag(9);
bt_add.setTag(10);
bt_delete.setTag(11);
bt_mul.setTag(12);
bt_div.setTag(13);
bt_c.setTag(14);
bt_xx.setTag(15);
bt_ce.setTag(16);
bt_aord.setTag(17);
bt_equal.setTag(18);
bt_point.setTag(19);
//給0-9和.加上數值對應的監聽
bt_0.setOnClickListener(ol);
bt_1.setOnClickListener(ol);
bt_2.setOnClickListener(ol);
bt_3.setOnClickListener(ol);
bt_4.setOnClickListener(ol);
bt_5.setOnClickListener(ol);
bt_6.setOnClickListener(ol);
bt_7.setOnClickListener(ol);
bt_8.setOnClickListener(ol);
bt_9.setOnClickListener(ol);
bt_point.setOnClickListener(ol);
//運算子類按鈕加上運演算法類的監聽
bt_add.setOnClickListener(cal_listener);
bt_delete.setOnClickListener(cal_listener);
bt_mul.setOnClickListener(cal_listener);
bt_div.setOnClickListener(cal_listener);
bt_equal.setOnClickListener(cal_listener);
//清除等按鈕
bt_c.setOnClickListener(setzero_listener);
bt_xx.setOnClickListener(setzero_listener);
bt_ce.setOnClickListener(setzero_listener);
bt_aord.setOnClickListener(setzero_listener);
}
OnClickListener ol=new OnClickListener() {
public void onClick(View view) {
int tag=(Integer) view.getTag();
if(eqstatus){
text="";
textview.setSelection(text.length());
eqstatus=false;
}
if(zestatus){
text="";
textview.setSelection(text.length());
zestatus=false;
}
switch(tag){
case 20:
text=text+"0";
break;
case 1:
text=text+"1";
break;
case 2:
text=text+"2";
break;
case 3:
text=text+"3";
break;
case 4:
text=text+"4";
break;
case 5:
text=text+"5";
break;
case 6:
text=text+"6";
break;
case 7:
text=text+"7";
break;
case 8:
text=text+"8";
break;
case 9:
text=text+"9";
break;
case 19:
text=text+".";
}
textview.setText(text);
textview.setSelection(text.length());
}
};
OnClickListener cal_listener=new OnClickListener() {
public void onClick(View view) {
int tag=(Integer) view.getTag();
//當單擊運算按鈕不為=時
if(tag!=18){
//儲存x並清除文字域
x=Float.parseFloat(text);
tagremeber=tag;
text="";
textview.setText(text);
textview.setSelection(text.length());
}
//點選=運算子時
else if(tag==18){
y=Float.parseFloat(text);
switch(tagremeber){
case 10:
cl=new Add();
break;
case 11:
cl=new Delete();
break;
case 12:
cl=new Mulitply();
break;
case 13:
cl=new Div();
break;
}
float result=cl.calculate(x, y);
text=String.valueOf(result);
textview.setText(text);
textview.setSelection(text.length());
//表示當前狀態為結果狀態,下次點選數字時會自動清除這次結果
eqstatus=true;
}
}
};
OnClickListener setzero_listener=new OnClickListener() {
//
@Override
public void onClick(View view) {
int tag=(Integer) view.getTag();
switch(tag){
//全部清除
case 14:
x=0;
y=0;
text="0.0";
zestatus=true;
break;
case 15:
text=text.substring(0,text.length()-1);
break;
case 16:
x=0;
text="0.0";
zestatus=true;
break;
case 17:
count++;
if(count!=0&&count%2==0){
text=text.substring(1);
}
else if(count%2==1){
text="-"+text;
}
break;
}
textview.setText(text);
textview.setSelection(text.length());
}
};
/**
* 配置選單元件
*/
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 0, 1,"退出" );
menu.add(0,1,2,"關於");
return true;
}
/**
* 觸發相應的事件
*/
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId())
{
case 0:
finish();
case 1:
Toast.makeText(MainActivity.this, "這是浩哥的計算機", 1).show();
}
return super.onOptionsItemSelected(item);
}
}
以上的按鈕的功能包括刪除,正負和置零功能以及加減乘除基本都實現了,感興趣的朋友可以自己實際測試一下