編輯:關於Android編程
之前自己的編程完全是在PC上進行的,而且主要是在算法和數據結構上。由於某些需要加之認識到Android的重要性,且大學走到現在基本上沒什麼課了,空閒時間很多,於是就開始學習Android。本系列博客都將圍繞Android應用程序設計展開,由於本人是完全沒有Android程序設計基礎,所以內容都很基礎,希望與大家交流學習並得到指點。
加上昨天,總共看了兩天Android書,覺得似乎可以寫點東西了,於是動手寫了個簡易計算器,在此總結一下。由於本系列博客主要作為我學習Android的讀書筆記,所以寫的東西側重語言,功能相對一般,在後面我將盡我所能增強這個計算器的功能,爭取推出一個人工智能版的。
1.Android布局
由於手機作為人的延伸,主要是面對絕對的用戶,讓他們來打發空閒時間的。基於此,我覺得用戶界面UI是個非常重要的方面,而Android的布局Layout是關乎UI的。Android中一共有5種布局:線性布局、表格布局、相對布局、幀布局、絕對布局等等。本次我采用的是表格布局,主要是基於計算器界面的對稱性考慮的。可以直接在對應的XLM文件中設計。
3.Android控件
本次一共用了兩種控件,文本框TextView、按鈕Button。通過為按鈕增加監聽事件來調用相應的命令,完成預定功能。關於Button有兩種使用方法:
a、設置監聽器並在監聽器中的代碼實現中添加事件處理代碼來響應事件
bt1.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
//完成功能
}
}
)
b、在XML文件中為按鈕的android:onClick的屬性制定一個方法來響應事件,如android:onClick="onClickBt1",然後在定義public方法public void onClickBt1(View v)
public void onClickBt1(View v)
{
//完成功能
}
還有菜單menu的使用,比較簡單,在此就不說了。
3.運行截圖:

目前不支持多次運算,無法表示負數,但可以顯示表達式,清0與刪除前一位。
4.源代碼
package com.example.calculator;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private String opA, opB, opC, show;
private int op;
private TextView tv;
private int flag;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
flag = 0;
opA = opB = opC = show = "";
tv = (TextView) findViewById(R.id.tv);
}
public void onClickBt1(View v) {
if (0 == flag)
opA += "1";
else
opB += "1";
show += "1";
tv.setText(show);
}
public void onClickBt2(View v) {
if (0 == flag)
opA += "2";
else
opB += "2";
show += "2";
tv.setText(show);
}
public void onClickBt3(View v) {
if (0 == flag)
opA += "3";
else
opB += "3";
show += "3";
tv.setText(show);
}
public void onClickBt4(View v) {
if (0 == flag)
opA += "4";
else
opB += "4";
show += "4";
tv.setText(show);
}
public void onClickBt5(View v) {
if (0 == flag)
opA += "5";
else
opB += "5";
show += "5";
tv.setText(show);
}
public void onClickBt6(View v) {
if (0 == flag)
opA += "6";
else
opB += "6";
show += "6";
tv.setText(show);
}
public void onClickBt7(View v) {
if (0 == flag)
opA += "7";
else
opB += "7";
show += "7";
tv.setText(show);
}
public void onClickBt8(View v) {
if (0 == flag)
opA += "8";
else
opB += "8";
show += "8";
tv.setText(show);
}
public void onClickBt9(View v) {
if (0 == flag)
opA += "9";
else
opB += "9";
show += "9";
tv.setText(show);
}
public void onClickBt0(View v) {
if (0 == flag)
if (0 == flag)
opA += "0";
else
opB += "0";
show += "0";
tv.setText(show);
}
public void onClickBtAdd(View v) {
flag=1;
show += "+";
op = 1;
tv.setText(show);
}
public void onClickBtSub(View v) {
flag=1;
show += "-";
op = 2;
tv.setText(show);
}
public void onClickBtMul(View v) {
flag=1;
show += "*";
op = 3;
tv.setText(show);
}
public void onClickBtDiv(View v) {
flag=1;
show += "/";
op = 4;
tv.setText(show);
}
public void onClickBtPoint(View v) {
if (0 == flag)
opA += ".";
else
opB += ".";
show += ".";
tv.setText(show);
}
public void onClickBtMod(View v) {
flag=1;
show += "%";
op = 5;
tv.setText(show);
}
public void onClickBtExp(View v) {
flag=1;
show += "^";
op = 6;
tv.setText(show);
}
public void onClickBtBack(View v) {
if (0 == flag && opA.length() != 0) {
opA = opA.substring(0, opA.length() - 1);
show = show.substring(0, show.length() - 1);
} else if (1 == flag) {
if (opB.length() != 0) {
opB = opB.substring(0, opB.length() - 1);
show = show.substring(0, show.length() - 1);
} else {
show = show.substring(0, show.length() - 1);
if(show.length()==opA.length())
flag = 0;
}
}
tv.setText(show);
}
public void onClickBtCE(View v) {
flag = 0;
opA = opB = opC = show = "";
tv.setText(show);
}
public void onClickBtEqual(View v) {
switch (op) {
case 1:
opC = String.valueOf(Double.parseDouble(opA)
+ Double.parseDouble(opB));
break;
case 2:
opC = String.valueOf(Double.parseDouble(opA)
- Double.parseDouble(opB));
break;
case 3:
opC = String.valueOf(Double.parseDouble(opA)
* Double.parseDouble(opB));
break;
case 4:
opC = String.valueOf(Double.parseDouble(opA)
/ Double.parseDouble(opB));
break;
case 5:
opC = String.valueOf(Double.parseDouble(opA)
% Double.parseDouble(opB));
break;
case 6:
opC = String.valueOf(Math.pow(Double.parseDouble(opA),
Double.parseDouble(opB)));
break;
}
show += "\n=" + opC;
tv.setText(show);
flag = 0;
opA = opB = opC = show = "";
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 1, 1, "退出");
menu.add(0, 2, 2, "版權");
menu.add(0, 3, 3, "功能");
return super.onCreateOptionsMenu(menu);
}
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == 1) {
finish();
}
if (item.getItemId() == 2) {
Toast.makeText(MainActivity.this, "作者:曉風殘月xj 時間:2014-5-13",
Toast.LENGTH_LONG).show();
}
if (item.getItemId() == 3) {
Toast.makeText(MainActivity.this, "後續有智能版本", Toast.LENGTH_LONG)
.show();
}
return super.onOptionsItemSelected(item);
}
}
如有錯誤,歡迎斧正!由於初學,水平有限,我把重點放在Android語言的試用,在後面的版本中力爭推出一個可與市面上相比的人工智能版本。源碼下載請點擊源碼地址。
談談Android Fragments 詳細使用
Fragments 誕生初衷自從Android 3.0中引入fragments 的概念,根據詞海的翻譯可以譯為:碎片、片段。其上的是為了解決不同屏幕分辯率的動態和靈活UI
修改Android Studio的Android SDK Path
為什麼要修改路徑呢……因為我之前裝過Eclipse,也裝過Android SDK,但是昨天裝Android Studio的時候不小心又裝了一個
android studio 編譯C生成.so文件
一、前言前段時間有個同事離職了,用C編譯的.SO文件需要更改,結果C文件是他寫的,無賴啊,自己又是一個小白,不會啊,所以自己又好好鑽研了一天,不會,看什麼都難啊,痛苦啊,
android之Dialog自定義引發的血案
我仍然從實際工作中出發!最近需要在照相機裡面添加聲控拍照功能(語音拍照),在設置當中需要實現如下圖的效果: 其設置的語音拍照菜單功能描述如下: (1)當點擊語音拍照菜單