用Android实现计算器

今天课程:

、点击事件的添加

①首先我们应该用写入EditText可编辑文本框,它有一个属性

android:hint="" 可在文本框里写入字符,当你写入其他的字符时会消失;写一个Button按钮标签,属性
android:onClick="doSubmit"是一个点击事件,如doSubmit在MainActivity.java写入监听方法,事件监听有三种写法:

1.1 标签上直接绑定监听方法
      public void xxx(View view) view代表的是按钮里的text

  1.2 创建监听器对象,组件再绑定监听器对象
    1.2.1 匿名内部类

    1.2.2 使用匿名内部类并定义成全局的属性

②不写onClick事件,可以在MainActivity中继承View.OnClickListene ,再在

 onCreate方法中设值。

在监听事件中可以用switch ...case来循环判断条件。

最后我们写了一个简单实现计算机的方法

这是我用网格布局写的简单计算机实现,但有点问题,在夜神运算时会停止运行,请看到的大神指教

activity.mian.xml

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:rowCount="5"
    android:columnCount="4"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/main_et_result"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_columnSpan="4"
        android:hint="计算"
        />
    <Button
        android:id="@+id/main_btn_btn1"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:text="1"
        android:onClick="doSubmit"
        />

    <Button
        android:id="@+id/main_btn_btn2"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:text="2"
        android:onClick="doSubmit"
        />
    <Button
        android:id="@+id/main_btn_btn3"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:text="3"
        android:onClick="doSubmit"
        />
    <Button
        android:id="@+id/main_btn_btn_chu"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:text="/"
        android:onClick="doSubmit"
        />
    <Button
        android:id="@+id/main_btn_btn4"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:text="4"
        android:onClick="doSubmit"
        />
    <Button
        android:id="@+id/main_btn_btn5"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:text="5"
        android:onClick="doSubmit"
        />
    <Button
        android:id="@+id/main_btn_btn6"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:text="6"
        android:onClick="doSubmit"
        />
    <Button
        android:id="@+id/main_btn_btn_cheng"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:text="*"
        android:onClick="doSubmit"
        />
    <Button
        android:id="@+id/main_btn_btn7"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:text="7"
        android:onClick="doSubmit"
        />
    <Button
        android:id="@+id/main_btn_btn8"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:text="8"
        android:onClick="doSubmit"
        />
    <Button
        android:id="@+id/main_btn_btn9"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:text="9"
        android:onClick="doSubmit"
        />
    <Button
        android:id="@+id/main_btn_btn_jian"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:text="-"
        android:onClick="doSubmit"
        />
    <Button
        android:id="@+id/main_btn_btn0"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_gravity="fill_horizontal"
        android:layout_columnSpan="2"
        android:text="0"
        android:onClick="doSubmit"
        />
    <Button
        android:id="@+id/main_btn_btn_dian"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:text="."
        android:onClick="doSubmit"
        />
    <Button
        android:id="@+id/main_btn_btn_jia"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_gravity="fill_vertical"
        android:layout_rowSpan="2"
        android:text="+"
        android:onClick="doSubmit"
        />
    <Button
        android:id="@+id/main_btn_btn_ok"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_gravity="fill_horizontal"
        android:layout_columnSpan="3"
        android:text="="
        android:onClick="doSubmit"
        />
    <Button
        android:id="@+id/main_btn_btn_clear"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_columnSpan="1"
        android:text="c"
        android:onClick="doSubmit"
        />
    <Button
        android:id="@+id/main_btn_btn_del"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_columnSpan="1"
        android:text="del"
        android:onClick="doSubmit"
        />
    <Space />


</GridLayout>

 MainActivity.java

public class MainActivity extends AppCompatActivity implements  View.OnClickListener{
    private EditText main_et_result;
    boolean clear_flag;//清空
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       main_et_result = findViewById(R.id.main_et_result);
    }
    @Override
   

 public void doSubmit(View view) {
        int id = view.getId();
        String input = main_et_result.getText().toString();
        switch (id){
            case R.id.main_btn_btn0:
                main_et_result.setText(main_et_result.getText().toString()+"0");
                break;
            case R.id.main_btn_btn1:
                main_et_result.setText(main_et_result.getText().toString()+"1");
                break;
            case R.id.main_btn_btn2:
                main_et_result.setText(main_et_result.getText().toString()+"2");
                break;
            case R.id.main_btn_btn3:
                main_et_result.setText(main_et_result.getText().toString()+"3");
                break;
            case R.id.main_btn_btn4:
                main_et_result.setText(main_et_result.getText().toString()+"4");
                break;
            case R.id.main_btn_btn5:
                main_et_result.setText(main_et_result.getText().toString()+"5");
                break;
            case R.id.main_btn_btn6:
                main_et_result.setText(main_et_result.getText().toString()+"6");
                break;
            case R.id.main_btn_btn7:
                main_et_result.setText(main_et_result.getText().toString()+"7");
                break;
            case R.id.main_btn_btn8:
                main_et_result.setText(main_et_result.getText().toString()+"8");
                break;
            case R.id.main_btn_btn9:
                main_et_result.setText(main_et_result.getText().toString()+"9");
                break;
            case R.id.main_btn_btn_cheng:
                main_et_result.setText(main_et_result.getText().toString()+"*");
                break;
            case R.id.main_btn_btn_chu:
                main_et_result.setText(main_et_result.getText().toString()+"/");
                if(clear_flag){
                    clear_flag = false;
                    input = "";
                    main_et_result.setText("");
                }
                main_et_result.setText(input+((Button) view).getText().toString());
                break;
            case R.id.main_btn_btn_jia:
                main_et_result.setText(main_et_result.getText().toString()+"+");
                break;
            case R.id.main_btn_btn_jian:
                main_et_result.setText(main_et_result.getText().toString()+"-");
                break;
            case R.id.main_btn_btn_dian:
                main_et_result.setText(main_et_result.getText().toString()+".");
                if(clear_flag){
                    clear_flag = false;
                    main_et_result.setText("");
                }
                main_et_result.setText(input+((Button) view).getText().toString());
                break;
            case R.id.main_btn_btn_ok:
                main_et_result.setText("=");
                getResult();
                break;
            case R.id.main_btn_btn_del:
                main_et_result.setText("del");
                if(clear_flag){
                    clear_flag = false;
                    main_et_result.setText("");
                }else if(input != null || !input.equals("")){
                    main_et_result.setText(input.substring(0,input.length()-1));
                }
                break;
            case R.id.main_btn_btn_clear:
                main_et_result.setText("c");
                clear_flag = false;
                input = "";
                main_et_result.setText("");
                break;
        }
    }

    private void getResult() {
        String exp = main_et_result.getText().toString();
        if(exp==null||exp.equals(""))
            return;
        if(!exp.contains(""))
            return;
        if(clear_flag){
            clear_flag = false;
            return;
        }
        clear_flag = true;
        double result = 0;
        //运算符前的数字
        String s1 = exp.substring(0,exp.indexOf(" "));
        //运算符
        String op = exp.substring(exp.indexOf(" ")+1,exp.indexOf(" ")+2);
        //运算符后的数字
        String s2 = exp.substring(exp.indexOf(" ")+3);
        if(!s1.equals("")&&!s2.equals("")){
            double d1 = Double.parseDouble(s1);
            double d2 = Double.parseDouble(s2);
            if(op.equals("+")){
                result = d1+d2;
            }else if(op.equals("-")){
                result = d1-d2;
            }else if(op.equals("*")){
                result = d1*d2;
            }else if(op.equals("/")){
                if(d2==0){
                    result = 0;
                }else{
                    result = d1/d2;
                }
            }
           if(!s1.contains(".")&& !s2.contains(".")&&!op.equals("/")){
                int r =(int) result;
                main_et_result.setText(r+"");
            }else{
                main_et_result.setText(result+"");
            }
        }else if(!s1.equals("")&&s2.equals("")){
            main_et_result.setText(exp);
        }else if(s1.equals("")&& !s2.equals("")){
            double d2 = Double.parseDouble(s2);
            if(op.equals("+")){
                result = 0+d2;
            }else if(op.equals("-")){
                result = 0-d2;
            }else if(op.equals("*")){
                result = 0;
            }else if(op.equals("/")){
                result = 0;
            }
            if(!s1.contains(".")&&!s2.contains(".")){
                int r = (int)result;
                main_et_result.setText(r+"");
            }else{
                main_et_result.setText(result+"");
            }
        }else{
            main_et_result.setText("");
        }
    }
}
 
 
 
 

二、输入框引入外形资源调节样式

 Android资源
   1.1 什么是资源
       指在res文件夹下的xml文件,每一种类型的xml文件都对应了一种资源。
       例如:外形资源(shape)、尺寸资源(dimension)、颜色资源(color)等
   1.2 尺寸资源和颜色资源放res/values目录下 
   1.3 *.xml(文本框的外形资源)可放到drawable目录下
   1.4 设置渐变色与背景色只能取其一,后面会覆盖前面的

根据获得/失去焦点边框变色编辑框
2. 选择器
  2.1 作用:根据控件状态显示不同样式
  2.2 Item: 指定不同状态下控件显示哪个样式

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/main_et_shape" android:state_focused="true"></item>
    <item android:drawable="@drawable/main_et_shape2" android:state_focused="false"></item>
</selector>

三、今天的收获

今天其实还听了一个同学的技术分享,感觉太牛了,讲的好详细,我自己也在研究一个技术,但没有什么进展,有点伤心,感觉自己不够用心。。。想到以为教员说的:时间还没到就不能说放弃!!!

现在说放弃太没有出息了,是时候学会成长了。。自己还不太成熟,总爱贪玩。加油!!!希望有大神能指点我!!

猜你喜欢

转载自blog.csdn.net/oydl_1234/article/details/82561063
今日推荐