仿Android原生计算器程序编写实例
一.界面布局
- main.xml布局文件代码实现如下:
按钮图片是自己做的,当然你也可以直接用Button
<?xml version=“1.0” encoding=“utf-8”?>
<TableLayout xmlns:android=“http://schemas.android.com/apk/res/android”
android:orientation=“vertical” android:layout_width=“fill_parent”
android:layout_height=“fill_parent”>
<EditText android:id=“@+id/text” android:layout_width=“fill_parent”
android:layout_height=“65px” android:text=“”
android:textColor=“#fff”
android:textSize=“40px”
android:singleLine=“true”/>
<TableRow android:id=“@+id/widget46” android:layout_width=“fill_parent”
android:layout_height=“50px” android:orientation=“horizontal”>
<ImageButton android:id=“@+id/b110” android:layout_width=“79px”
android:layout_height=“50px” android:background=“@drawable/b110”
android:layout_margin=“1px” />
<ImageButton android:id=“@+id/b120” android:layout_width=“79px”
android:layout_height=“50px” android:background=“@drawable/b120”
android:layout_margin=“1px” />
<ImageButton android:id=“@+id/b100” android:layout_width=“79px”
android:layout_height=“50px” android:background=“@drawable/b100”
android:layout_margin=“1px” />
<ImageButton android:id=“@+id/b130” android:layout_width=“73px”
android:layout_height=“50px” android:background=“@drawable/b130”
android:layout_margin=“1px” />
</TableRow>
<TableRow android:id=“@+id/widget47” android:layout_width=“fill_parent”
android:layout_height=“80px” android:orientation=“horizontal”>
<ImageButton android:id=“@+id/b070” android:layout_width=“wrap_content”
android:layout_height=“76px” android:background=“@drawable/b070”
android:layout_margin=“1px” />
<ImageButton android:id=“@+id/b080” android:layout_width=“wrap_content”
android:layout_height=“76px” android:background=“@drawable/b080”
android:layout_margin=“1px” />
<ImageButton android:id=“@+id/b090” android:layout_width=“wrap_content”
android:layout_height=“76px” android:background=“@drawable/b090”
android:layout_margin=“1px” />
<ImageButton android:id=“@+id/b170” android:layout_width=“wrap_content”
android:layout_height=“76px” android:background=“@drawable/b170”
android:layout_margin=“1px” />
</TableRow>
<TableRow android:id=“@+id/widget47” android:layout_width=“fill_parent”
android:layout_height=“80px” android:orientation=“horizontal”>
<ImageButton android:id=“@+id/b040” android:layout_width=“wrap_content”
android:layout_height=“76px” android:background=“@drawable/b040”
android:layout_margin=“1px” />
<ImageButton android:id=“@+id/b050” android:layout_width=“wrap_content”
android:layout_height=“76px” android:background=“@drawable/b050”
android:layout_margin=“1px” />
<ImageButton android:id=“@+id/b060” android:layout_width=“wrap_content”
android:layout_height=“76px” android:background=“@drawable/b060”
android:layout_margin=“1px” />
<ImageButton android:id=“@+id/b160” android:layout_width=“wrap_content”
android:layout_height=“76px” android:background=“@drawable/b160”
android:layout_margin=“1px” />
</TableRow>
<TableRow android:id=“@+id/widget47” android:layout_width=“fill_parent”
android:layout_height=“80px” android:orientation=“horizontal”>
<ImageButton android:id=“@+id/b010” android:layout_width=“wrap_content”
android:layout_height=“76px” android:background=“@drawable/b010”
android:layout_margin=“1px” />
<ImageButton android:id=“@+id/b020” android:layout_width=“wrap_content”
android:layout_height=“76px” android:background=“@drawable/b020”
android:layout_margin=“1px” />
<ImageButton android:id=“@+id/b030” android:layout_width=“wrap_content”
android:layout_height=“76px” android:background=“@drawable/b030”
android:layout_margin=“1px” />
<ImageButton android:id=“@+id/b150” android:layout_width=“wrap_content”
android:layout_height=“76px” android:background=“@drawable/b150”
android:layout_margin=“1px” />
</TableRow>
<TableRow android:id=“@+id/widget47” android:layout_width=“fill_parent”
android:layout_height=“80px” android:orientation=“horizontal”>
<ImageButton android:id=“@+id/b190” android:layout_width=“wrap_content”
android:layout_height=“76px” android:background=“@drawable/b190”
android:layout_margin=“1px” />
<ImageButton android:id=“@+id/b000” android:layout_width=“wrap_content”
android:layout_height=“76px” android:background=“@drawable/b000”
android:layout_margin=“1px” />
<ImageButton android:id=“@+id/b180” android:layout_width=“wrap_content”
android:layout_height=“76px” android:background=“@drawable/b180”
android:layout_margin=“1px” />
<ImageButton android:id=“@+id/b140” android:layout_width=“wrap_content”
android:layout_height=“76px” android:background=“@drawable/b140”
android:layout_margin=“1px” />
</TableRow>
</TableLayout>
- 按钮的事件以及算法的实现
JsqActivity.java代码如下:
import java.util.ArrayList;
import java.util.StringTokenizer;
import com.yinlans.jsq.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.EditText;
import android.widget.ImageButton;
/**
*实现按钮的事件处理及算法
* @author Administrator
*
*/
public class JsqActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//通过findViewById获取EditText对象
final EditText text = (EditText) this.findViewById(R.id.text);
//通过findViewById获得ImageButton
final ImageButton b000 = (ImageButton) this.findViewById(R.id.b000);
final ImageButton b010 = (ImageButton) this.findViewById(R.id.b010);
final ImageButton b020 = (ImageButton) this.findViewById(R.id.b020);
final ImageButton b030 = (ImageButton) this.findViewById(R.id.b030);
final ImageButton b040 = (ImageButton) this.findViewById(R.id.b040);
final ImageButton b050 = (ImageButton) this.findViewById(R.id.b050);
final ImageButton b060 = (ImageButton) this.findViewById(R.id.b060);
final ImageButton b070 = (ImageButton) this.findViewById(R.id.b070);
final ImageButton b080 = (ImageButton) this.findViewById(R.id.b080);
final ImageButton b090 = (ImageButton) this.findViewById(R.id.b090);
final ImageButton b110 = (ImageButton) this.findViewById(R.id.b110);
final ImageButton b100 = (ImageButton) this.findViewById(R.id.b100);
final ImageButton b120 = (ImageButton) this.findViewById(R.id.b120);
final ImageButton b130 = (ImageButton) this.findViewById(R.id.b130);
final ImageButton b140 = (ImageButton) this.findViewById(R.id.b140);
final ImageButton b150 = (ImageButton) this.findViewById(R.id.b150);
final ImageButton b160 = (ImageButton) this.findViewById(R.id.b160);
final ImageButton b170 = (ImageButton) this.findViewById(R.id.b170);
final ImageButton b180 = (ImageButton) this.findViewById(R.id.b180);
final ImageButton b190 = (ImageButton) this.findViewById(R.id.b190);
//对EditText进行设置
text.setBackgroundColor(0);//设置EditText的颜色
text.setGravity(Gravity.RIGHT);//设置EditText的光标显示在右边
//实现图片切换时的效果(两张图片)
final OnTouchListener listener=new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODOAuto-generated method stub
if (event.getAction() == MotionEvent.ACTION_DOWN) {
down(v,text);
} else if (event.getAction() == MotionEvent.ACTION_UP) {
up(v,text);
}
return false; } };
//对按钮加监听
b000.setOnTouchListener(listener);
b010.setOnTouchListener(listener);
b020.setOnTouchListener(listener);
b030.setOnTouchListener(listener);
b040.setOnTouchListener(listener);
b050.setOnTouchListener(listener);
b060.setOnTouchListener(listener);
b070.setOnTouchListener(listener);
b080.setOnTouchListener(listener);
b090.setOnTouchListener(listener);
b100.setOnTouchListener(listener);
b110.setOnTouchListener(listener);
b120.setOnTouchListener(listener);
b130.setOnTouchListener(listener);
b140.setOnTouchListener(listener);
b150.setOnTouchListener(listener);
b160.setOnTouchListener(listener);
b170.setOnTouchListener(listener);
b180.setOnTouchListener(listener);
b190.setOnTouchListener(listener);
}
private void addText(String s,EditText text){
text.setText(text.getText()+s);
text.setSelection(text.length());//对于EditText里的内容,光标始终显示在右边
}
private void tui(String flag,EditText text){
//退格的实现
if(“tui”.equals(flag)){
String t=text.getText().toString();
text.setText(t.substring(0, t.length()-1));
text.setSelection(text.length());
//清除的实现
}else if(“clear”.equals(flag)){
text.setText(“”);
}
}
//实现按钮的数字
private void down(View v,EditText text){
switch(v.getId()){
case R.id.b000:{
v.setBackgroundResource(R.drawable.b001);
addText(“0”,text);
break;
}
case R.id.b010:{
v.setBackgroundResource(R.drawable.b011);
addText(“1”,text);break;
}
case R.id.b020:{
v.setBackgroundResource(R.drawable.b021);
addText(“2”,text);break;
}
case R.id.b030:{
v.setBackgroundResource(R.drawable.b031);
addText(“3”,text);break;
}
case R.id.b040:{
v.setBackgroundResource(R.drawable.b041);
addText(“4”,text);break;
}
case R.id.b050:{
v.setBackgroundResource(R.drawable.b051);
addText(“5”,text);break;
}
case R.id.b060:{
v.setBackgroundResource(R.drawable.b061);
addText(“6”,text);break;
}
case R.id.b070:{
v.setBackgroundResource(R.drawable.b071);
addText(“7”,text);break;
}
case R.id.b080:{
v.setBackgroundResource(R.drawable.b081);
addText(“8”,text);break;
}
case R.id.b090:{
v.setBackgroundResource(R.drawable.b091);
addText(“9”,text);break;
}
case R.id.b100:{
v.setBackgroundResource(R.drawable.b101);
tui(“tui”,text);
break;
}
case R.id.b110:{
v.setBackgroundResource(R.drawable.b111);
addText(“(“,text);break;
}
case R.id.b120:{
v.setBackgroundResource(R.drawable.b121);
addText(“)”,text);break;
}
case R.id.b130:{
v.setBackgroundResource(R.drawable.b131);
tui(“clear”,text);
break;
}
case R.id.b140:{
v.setBackgroundResource(R.drawable.b141);
addText(“+”,text);break;
}
case R.id.b150:{
v.setBackgroundResource(R.drawable.b151);
addText(“-“,text);break;
}
case R.id.b160:{
v.setBackgroundResource(R.drawable.b161);
addText(“×”,text);break;
}
case R.id.b170:{
v.setBackgroundResource(R.drawable.b071);
addText(“÷”,text);break;
}
case R.id.b180:{
v.setBackgroundResource(R.drawable.b181);
text.setText(getKuo(text.getText()+””)+””);
text.setSelection(text.getText().length());
break;
}
case R.id.b190:{
v.setBackgroundResource(R.drawable.b191);
addText(“.”,text);break;
}
}
}
private void up(View v,EditText text){
switch(v.getId()){
case R.id.b000:{
v.setBackgroundResource(R.drawable.b000);break;
}
case R.id.b010:{
v.setBackgroundResource(R.drawable.b010);break;
}
case R.id.b020:{
v.setBackgroundResource(R.drawable.b020);break;
}
case R.id.b030:{
v.setBackgroundResource(R.drawable.b030);break;
}
case R.id.b040:{
v.setBackgroundResource(R.drawable.b040);break;
}
case R.id.b050:{
v.setBackgroundResource(R.drawable.b050);break;
}
case R.id.b060:{
v.setBackgroundResource(R.drawable.b060);break;
}
case R.id.b070:{
v.setBackgroundResource(R.drawable.b070);break;
}
case R.id.b080:{
v.setBackgroundResource(R.drawable.b080);break;
}
case R.id.b090:{
v.setBackgroundResource(R.drawable.b090);break;
}
case R.id.b100:{
v.setBackgroundResource(R.drawable.b100);break;
}
case R.id.b110:{
v.setBackgroundResource(R.drawable.b110);break;
}
case R.id.b120:{
v.setBackgroundResource(R.drawable.b120);break;
}
case R.id.b130:{
v.setBackgroundResource(R.drawable.b130);break;
}
case R.id.b140:{
v.setBackgroundResource(R.drawable.b140);break;
}
case R.id.b150:{
v.setBackgroundResource(R.drawable.b150);break;
}
case R.id.b160:{
v.setBackgroundResource(R.drawable.b160);break;
}
case R.id.b170:{
v.setBackgroundResource(R.drawable.b170);break;
}
case R.id.b180:{
v.setBackgroundResource(R.drawable.b180);break;
}
case R.id.b190:{
v.setBackgroundResource(R.drawable.b190);break;
}
}
}
//运算(两种情况)
//有()的运算
public double getKuo(String s){
if (s.lastIndexOf(‘(‘) == -1) {
return getValue(s);
} else {
int left = s.lastIndexOf(‘(‘);
int right = -1;
for (int i = left; i < s.length();i++) {
if (s.charAt(i) == ‘)’) {
right = i;
break;
}
}
String sr = s.substring(left + 1,right);
String st = getValue(sr) + “”;
String s1 = s.substring(0, left);
String s2 = s.substring(right + 1);
return getKuo(s1 + st + s2);
}
}
//单纯的数字加减乘除
public double getValue(String res){
for (int i = 0; i < res.length(); i++) {
if (res.charAt(i) == ‘-‘) {
if (i == 0)
res = “@” + res.substring(1);
else {
char c = res.charAt(i – 1);
switch (c) {
case ‘+’:
case ‘-‘:
case ‘×’:
case ‘÷’:
case ‘(‘: res = res.substring(0, i) + “@” + res.substring(i + 1);
}
}
}
}
StringTokenizer st = new StringTokenizer(res,”+-÷×”);
ArrayList<Double> datas = new ArrayList<Double>();
while (st.hasMoreTokens()) {
String num = st.nextToken();
System.out.println(num);
if (num.charAt(0) == ‘@’)
datas.add(Double.parseDouble(“-” + num.substring(1)));
else
datas.add(Double.parseDouble(num));
}
StringTokenizer st2 = new StringTokenizer(res,”0123456789.@”);
ArrayList<String> fus = new ArrayList<String>();
while (st2.hasMoreTokens()) {
fus.add(st2.nextToken());
}
for (int i = 0; i < fus.size();i++) {
String fu = fus.get(i);
if (fu.equals(“×”) || fu.equals(“÷”)) {
fus.remove(i);
double d1 = datas.remove(i);
double d2 = datas.remove(i);
double d = 0;
if (fu.equals(“×”)) {
d = d1 * d2;
} else {
d = d1 / d2;
}
datas.add(i, d);
i–;
}
}
while (!fus.isEmpty()) {
String fu = fus.remove(0);
double d1 = datas.remove(0);
double d2 = datas.remove(0);
double d = 0;
if (fu.equals(“+”)) {
d = d1 + d2;
} else {
d = d1 – d2;
}
datas.add(0, d);
}
return datas.get(0);
}
}
这样,一个Android版的计算器就Ok了!
按钮这里是提取的方法:由于有多个按钮我们可以把相同的代码写成一个方法提取出来,然后进行调用。当然我们也可以用下面的方法,对每个按钮都这样写。
实现ImageButton事件监听
b000.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODOAuto-generated method stub
if (event.getAction() == MotionEvent.ACTION_DOWN) {
v.setBackgroundResource(R.drawable.b001);
text.setText(text.getText()+”0″);
text.setSelection(text.length());
} else if (event.getAction() == MotionEvent.ACTION_UP) {
v.setBackgroundResource(R.drawable.b000);
}
return false; } });
No Responses To This Post So Far(Rss)