第一个Android app,计算器~

好歹是第一个嘛。

缩放字体花了点时间,连续运行的逻辑折腾了半天,其他也没什么了,留下一些坑:double类型二进制转十进制的诡异问题,连续按等号,预留按键,退格键,以后再说吧。(估计是不会有以后了。。)


MainActivity

package cn.michael.calculator;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextPaint;
import android.util.TypedValue;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

/**
 * Created by Michael on 2016/1/12.
 * Finish by Michael on 2016/1/13.
 * 实现加减乘除,屏幕缩放,连续运算等功能。
 */
public class MainActivity extends AppCompatActivity {

    double ansNum=0;
    double showNum=0;
    double aNum=0;
    double bNum=0;
    int dotCount=0;
    int operator=0;
    boolean hasANum = false;

    //统一屏显输出函数
    public void showText(double showNum)
    {
        TextView text=(TextView)findViewById(R.id.textView);
        String str=Double.toString(showNum);
        int len=str.length();
        text.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 100);
        //判断计数法,去尾零
        if (!str.contains("E"))
            str=str.substring(len-1,len).equals("0") ? str.substring(0,len-1) : str;
        //缩放字体
        TextPaint FontPaint = new TextPaint();
        FontPaint.setTextSize(text.getTextSize());
        if (FontPaint.measureText(str)>text.getWidth())
            text.setTextSize(TypedValue.COMPLEX_UNIT_PX,text.getTextSize()*text.getWidth() / FontPaint.measureText(str)-10);
        text.setText(str);
    }

    @Override
    protected void onCreate(Bundle saveInstanceState) {
        super.onCreate(saveInstanceState);
        setContentView(R.layout.main_layout);
        //数字键监视实现
        View.OnClickListener numListener= new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (MainActivity.this.operator==0)
                    MainActivity.this.hasANum=false;
                //将按键名转换为数字
                int b=Integer.parseInt(((Button)v).getText().toString());
                //小数点
                if (MainActivity.this.dotCount==0)
                    MainActivity.this.showNum=MainActivity.this.showNum*10+b;
                else {
                    MainActivity.this.showNum+=b/Math.pow(10,dotCount);
                    dotCount++;
                }
                MainActivity.this.showText(MainActivity.this.showNum);
            }
        };
        //数字键监视定义
        findViewById(R.id.num1).setOnClickListener(numListener);
        findViewById(R.id.num2).setOnClickListener(numListener);
        findViewById(R.id.num3).setOnClickListener(numListener);
        findViewById(R.id.num4).setOnClickListener(numListener);
        findViewById(R.id.num5).setOnClickListener(numListener);
        findViewById(R.id.num6).setOnClickListener(numListener);
        findViewById(R.id.num7).setOnClickListener(numListener);
        findViewById(R.id.num8).setOnClickListener(numListener);
        findViewById(R.id.num9).setOnClickListener(numListener);
        findViewById(R.id.num0).setOnClickListener(numListener);
        //点键监听实现,定义
        findViewById(R.id.dot).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MainActivity.this.dotCount = 1;
            }
        });
        //等于键监听实现
        final View.OnClickListener equalListener=new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MainActivity.this.bNum=MainActivity.this.showNum;
                switch (MainActivity.this.operator)
                {
                    case 1:
                        MainActivity.this.ansNum=MainActivity.this.aNum+MainActivity.this.bNum;
                        break;
                    case 2:
                        MainActivity.this.ansNum=MainActivity.this.aNum-MainActivity.this.bNum;
                        break;
                    case 3:
                        MainActivity.this.ansNum=MainActivity.this.aNum*MainActivity.this.bNum;
                        break;
                    case 4:
                        MainActivity.this.ansNum=MainActivity.this.aNum/MainActivity.this.bNum;
                        break;
                    case 0:
                }
                MainActivity.this.showText(MainActivity.this.ansNum);
                MainActivity.this.showNum=0;
                MainActivity.this.operator=0;
                MainActivity.this.aNum=MainActivity.this.ansNum;
                MainActivity.this.dotCount=0;
            }
        };
        //等于键监听定义
        findViewById(R.id.equal).setOnClickListener(equalListener);
        //运算符键监听实现
        View.OnClickListener operatorListener=new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!MainActivity.this.hasANum) {
                    MainActivity.this.aNum = MainActivity.this.showNum;
                    MainActivity.this.hasANum=true;
                }
                else
                    equalListener.onClick(null);
                MainActivity.this.showNum = 0;
                MainActivity.this.dotCount=0;
                switch (v.getId()) {
                    case R.id.plus:
                        MainActivity.this.operator=1;
                        break;
                    case R.id.minus:
                        MainActivity.this.operator=2;
                        break;
                    case R.id.multiply:
                        MainActivity.this.operator=3;
                        break;
                    case R.id.divide:
                        MainActivity.this.operator=4;
                        break;
                }
            }
        };
        //运算符键监听定义
        findViewById(R.id.plus).setOnClickListener(operatorListener);
        findViewById(R.id.minus).setOnClickListener(operatorListener);
        findViewById(R.id.multiply).setOnClickListener(operatorListener);
        findViewById(R.id.divide).setOnClickListener(operatorListener);
        //清空键监听实现,定义
        findViewById(R.id.clearevery).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TextView text = (TextView) findViewById(R.id.textView);
                text.setText("0.");
                text.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 100);
                MainActivity.this.showNum = 0;
                MainActivity.this.ansNum = 0;
                MainActivity.this.operator = 0;
                MainActivity.this.hasANum = false;
                MainActivity.this.dotCount = 0;
            }
        });
        //清除键监听实现,定义。清除键只清除屏幕显示。
        findViewById(R.id.clear).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MainActivity.this.showText(MainActivity.this.showNum = 0);
                MainActivity.this.dotCount = 0;
            }
        });
    }
}


main_layout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="0."
        android:id="@+id/textView"
        android:layout_gravity="center_horizontal"
        android:textSize="100dp"
        android:gravity="center_vertical|right"
        android:padding="5dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:padding="10dp">
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <Button
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:text=""
                android:textSize="50sp"
                android:id="@+id/button1" />

            <Button
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:text=""
                android:textSize="50sp"
                android:id="@+id/button2" />

            <Button
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:text="CE"
                android:textSize="50sp"
                android:id="@+id/clearevery" />

            <Button
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:text="C"
                android:textSize="50sp"
                android:id="@+id/clear" />

        </LinearLayout>

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <Button
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:text="7"
                android:textSize="50sp"
                android:id="@+id/num7" />

            <Button
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:text="8"
                android:textSize="50sp"
                android:id="@+id/num8" />

            <Button
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:text="9"
                android:textSize="50sp"
                android:id="@+id/num9" />

            <Button
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:text="/"
                android:textSize="50sp"
                android:id="@+id/divide" />

        </LinearLayout>

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <Button
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:text="4"
                android:textSize="50sp"
                android:id="@+id/num4" />

            <Button
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:text="5"
                android:textSize="50sp"
                android:id="@+id/num5" />

            <Button
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:text="6"
                android:textSize="50sp"
                android:id="@+id/num6" />

            <Button
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:text="×"
                android:textSize="50sp"
                android:id="@+id/multiply" />

        </LinearLayout>

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <Button
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:text="1"
                android:textSize="50sp"
                android:id="@+id/num1" />

            <Button
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:text="2"
                android:textSize="50sp"
                android:id="@+id/num2" />

            <Button
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:text="3"
                android:textSize="50sp"
                android:id="@+id/num3" />

            <Button
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:text="-"
                android:textSize="50sp"
                android:id="@+id/minus" />

        </LinearLayout>

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <Button
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:text="0"
                android:textSize="50sp"
                android:id="@+id/num0" />

            <Button
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:text="."
                android:textSize="50sp"
                android:id="@+id/dot" />

            <Button
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:text="="
                android:textSize="50sp"
                android:id="@+id/equal" />

            <Button
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:text="+"
                android:textSize="50sp"
                android:id="@+id/plus" />
        </LinearLayout>

    </LinearLayout>

</RelativeLayout>

附源码http://download.csdn.net/download/a254244460/9402429


更新:

1.删去所有MainActivity.this.,多余。

2.统一double转String使用String.format()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值