首页 > 移动平台 > 详细

第一个Android实例——计算器

时间:2015-09-23 02:10:09      阅读:332      评论:0      收藏:0      [点我收藏+]

学习Android已经有一段时间了,最近一直在啃书,感觉挺充实的~好期待放假,这样可以快点把书看完自己去多做点实例项目,加深理解。

这是之前写的一个计算器小程序,比较简单,但是是自己第一个用Android写出来的小程序,值得纪念噢~

计算器实例

第一部分:计算器布局设计

? ? ? ?首选需要new一个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:background="#111"
    tools:context="com.example.jisuanqi.MainActivity" >

    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#fff"
        android:gravity="right"
        android:layout_margin="5dp"
         />

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <Button
                android:id="@+id/btn1"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="1" />

            <Button
                android:id="@+id/btn2"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="2" />

            <Button
                android:id="@+id/btn3"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="3" />

            <Button
                android:id="@+id/btnjia"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="+" />
        </TableRow>

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <Button
                android:id="@+id/btn4"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="4" />

            <Button
                android:id="@+id/btn5"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="5" />

            <Button
                android:id="@+id/btn6"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="6" />

            <Button
                android:id="@+id/btnjian"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="-" />
        </TableRow>

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <Button
                android:id="@+id/btn7"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="7" />

            <Button
                android:id="@+id/btn8"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="8" />

            <Button
                android:id="@+id/btn9"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="9" />

            <Button
                android:id="@+id/btncheng"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="*" />
        </TableRow>

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <Button
                android:id="@+id/btnclean"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="C" />

            <Button
                android:id="@+id/btn0"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="0" />

            <Button
                android:id="@+id/btndengyu"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="=" />

            <Button
                android:id="@+id/btnchu"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="/" />
        </TableRow>
    </TableLayout>

</LinearLayout>

?

?

?预览效果:
bubuko.com,布布扣

虽然看起来还比较硕,但是起码有个样子了...(*^__^*)?
?

?

第二部分:计算器功能实现

首先需要在主activity中注册组件

?

public class MainActivity extends Activity implements OnClickListener {

	private TextView tvScreen ;
	private List<Item> items = new ArrayList<Item>();

这里引入OnclickListener接口 是在后面绑定按钮设置监听器

?

然后重写onCreate方法,把布局中的按钮以及textview绑定

?

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		tvScreen = (TextView) findViewById(R.id.tv);
		findViewById(R.id.btn0).setOnClickListener(this);
		findViewById(R.id.btn1).setOnClickListener(this);
		findViewById(R.id.btn2).setOnClickListener(this);
		findViewById(R.id.btn3).setOnClickListener(this);
		findViewById(R.id.btn4).setOnClickListener(this);
		findViewById(R.id.btn5).setOnClickListener(this);
		findViewById(R.id.btn6).setOnClickListener(this);
		findViewById(R.id.btn7).setOnClickListener(this);
		findViewById(R.id.btn8).setOnClickListener(this);
		findViewById(R.id.btn9).setOnClickListener(this);
		findViewById(R.id.btnjia).setOnClickListener(this);
		findViewById(R.id.btnjian).setOnClickListener(this);
		findViewById(R.id.btncheng).setOnClickListener(this);
		findViewById(R.id.btnchu).setOnClickListener(this);
		findViewById(R.id.btndengyu).setOnClickListener(this);
		findViewById(R.id.btnclean).setOnClickListener(this);
		findViewById(R.id.btn0).setOnClickListener(this);
	
		
	}

?到了这一步,得理清一下算法逻辑。

?

?

我们首先得输入一个数字,然后输入运算符号,再输入数字,再执行=

10+20

?

一个数字一个操作符号一个数字一个操作符号这样排列

10+20=28

?

在执行第二个操作符号时前面三项已经可以执行运算了

所以这里需要一个原则:一旦能执行操作运算就执行操作运算,之后再与后面的元素执行相关操作

?

所以这里可以用数组把这些项都记录下来,然后再做一个判断,判断前面三项是否有三项,就可以执行运算,如果是就执行运算并继续到下一个。

?

所以接下来再创建一个类Item.java(注意这个类和Mainactivity在一个包里)表示每一项

package com.example.jisuanqi;

public class Item {
	
	public Item(double value, int type) {
		this.value = value;
		this.type = type;
	}
	
	public double value = 0;
	
	public int type = 0;
}

?以及另一个类表示数据类型Types.java

package com.example.jisuanqi;

public class Types {

	public static final int jia = 1;

	public static final int jian = 2;
	
	public static final int cheng = 3;

	public static final int chu = 4;

	public static final int dengyu = 5;
}

?再回到mainactivity里定义一个数组,这个数组是用来存放项的,也就是计算时输入的项。

public class MainActivity extends Activity implements OnClickListener {

	private TextView tvScreen ;
	private List<Item> items = new ArrayList<Item>();

?然后在onclick()方法中作判断,分别执行不同的操作。

public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btn0:
			tvScreen.append("0");
			break;
		case R.id.btn1:
			tvScreen.append("1");
			break;
		case R.id.btn2:
			tvScreen.append("2");
			break;
		case R.id.btn3:
			tvScreen.append("3");
			break;
		case R.id.btn4:
			tvScreen.append("4");
			break;
		case R.id.btn5:
			tvScreen.append("5");
			break;
		case R.id.btn6:
			tvScreen.append("6");
			break;
		case R.id.btn7:
			tvScreen.append("7");
			break;
		case R.id.btn8:
			tvScreen.append("8");
			break;
		case R.id.btn9:
			tvScreen.append("9");
			break;
		case R.id.btnjia:
			items.add(new Item(Double.parseDouble(tvScreen.getText().toString()),Types.dengyu));
			checkAndCompute();
			items.add(new Item(0, Types.jia));
			tvScreen.setText("");
			break;
		case R.id.btnjian:
			items.add(new Item(Double.parseDouble(tvScreen.getText().toString()),Types.dengyu));
			checkAndCompute();
			items.add(new Item(0, Types.jian));
			tvScreen.setText("");
			break;
		case R.id.btncheng:
			items.add(new Item(Double.parseDouble(tvScreen.getText().toString()),Types.dengyu));
			checkAndCompute();
			items.add(new Item(0, Types.cheng));
			tvScreen.setText("");
			break;
		case R.id.btnchu:
			items.add(new Item(Double.parseDouble(tvScreen.getText().toString()),Types.dengyu));
			checkAndCompute();
			items.add(new Item(0, Types.chu));
			tvScreen.setText("");
			break;
		case R.id.btnclean:
			tvScreen.setText("");
			items.clear();
			break;
		case R.id.btndengyu:
			items.add(new Item(Double.parseDouble(tvScreen.getText().toString()),Types.dengyu));
			checkAndCompute();
			tvScreen.setText(items.get(0).value+"");
			items.clear();
			break;

		default:
			break;
		}
	}

?注意这里还需要一个方法进行计算

?

	public void checkAndCompute() {
		if (items.size()>=3) {
			double a = items.get(0).value;
			double b = items.get(2).value;
			int opt = items.get(1).type;
			
			items.clear();
			
			switch (opt) {
			case Types.jia:
				items.add(new Item(a+b, Types.dengyu));
				break;
			case Types.jian:
				items.add(new Item(a-b, Types.dengyu));
				break;
			case Types.cheng:
				items.add(new Item(a*b, Types.dengyu));
				break;
			case Types.chu:
				items.add(new Item(a/b, Types.dengyu));
				break;

			default:
				break;
			}
			
		}
	}

?

?

这样一来,计算器功能就已经实现了,下面是虚拟机上的运行效果图:

操作:6+3=9


bubuko.com,布布扣
?
bubuko.com,布布扣
?
bubuko.com,布布扣
?
bubuko.com,布布扣
?

ps:写完之后发现其实还是有很多缺陷的。。比如没有小数点.,不过把左下方C的按钮换成“.”,然后再到下方加一个专门的clean按钮就可以了~

第一个Android实例——计算器

原文:http://545283613.iteye.com/blog/2245375

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!