Android第二个apk之计算器

这次来做一个计算器,这个计算器是我以后要做的一个apk的一部分,先来看一下计算器的功能:在有输入的时候会直接显示结果,也就是监测edittext的变化,这样比较方便,不用点击计算按钮


先总结一下这次遇到的问题:

  1. TextEdit的监听器是什么?
  2. 判断TextEdit为空的方法?
  3. String转double
  4. double的格式化,即保留三位小数
  5. TextEdit焦点问题,即默认哪一个TextEdit先获得焦点
  6. 为程序添加菜单,菜单中添加退出选项

1.控件布局

这里要注意的是TextEdit的类型要选择Number,这样在获得焦点的时候会自动弹出数字输入法

还有一个问题就是焦点的问题,看xml中,这是两个EditText,下面的先获取焦点,就是输入光标先出现在下面这个TextEdit中,对比一下就知道怎么做了

2.实现代码

package com.example.calculator;

import java.text.DecimalFormat;
import com.example.calculator.R.id;
import android.os.Bundle;
import android.R.string;
import android.app.Activity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

    //声明对应变量
	private EditText textBuy;
    private EditText textSell;
    private TextView textIncome;
    private EditText textp;
	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找到这些控件
        textBuy = (EditText)findViewById(R.id.editTextBuy);
        textSell = (EditText)findViewById(R.id.editTextSell);
        textIncome = (TextView)findViewById(R.id.textViewIncome);
        textp = (EditText)findViewById(id.editTextp);
        textp.setText("0.2");
        //内容改变监听器,三个text使用一个监听器
        textBuy.addTextChangedListener(textWatcher);
        textSell.addTextChangedListener(textWatcher);
        textp.addTextChangedListener(textWatcher);
	}
	private TextWatcher textWatcher = new TextWatcher() {
		
		@Override
		public void onTextChanged(CharSequence s, int start, int before, int count) {
			// TODO Auto-generated method stub
			//EditText内容改变时就是执行这个函数
			String buy = textBuy.getText().toString();
			String sell = textSell.getText().toString();
			String pString = textp.getText().toString();
			//只有EditText内容不为空的时候才计算,不然会出现问题
			if (buy.length() != 0 && sell.length() != 0 && pString.length() != 0){
				//String转double
				double p = 1.0 - Double.parseDouble(textp.getText().toString()) / 100.0;
				double d = Double.parseDouble(sell) / Double.parseDouble(buy)*p*p - 1.0;
				//保留三位小数
				DecimalFormat df = new DecimalFormat("#.###");
				//显示计算结果
				textIncome.setText(df.format(d*100) + "");
			}
			else {
				textIncome.setText("0.000");
			}
		}
		
		@Override
		public void beforeTextChanged(CharSequence s, int start, int count,
				int after) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void afterTextChanged(Editable s) {
			// TODO Auto-generated method stub

		}
	};


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        //getMenuInflater().inflate(R.menu.main, menu);
    	//菜单中添加一个退出选项
        menu.add("退出");
        return true;
    }


	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		//退出程序
		finish();
		return super.onOptionsItemSelected(item);
	}
    
}
其中EditText监听器添加方法:输入完下面这一句时会自动添加
private TextWatcher textWatcher = new TextWatcher() {
菜单点击监听的添加方法:
右键——在弹出的菜单中选择Source——Override/Implement Methods...
在弹出的对话框中选择:onOptionsItemSelected

代码中收益的计算公式:
差不多就这样了,后面想到了再添加
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值