实现一个计算器 ,有加减乘除功能,小数点和清除操作。
这是学校安卓老师布置的作业,计算器说实话实现起来挺多坑的,之前在算法比赛中见过这种题,用来熟悉安卓的布局的确是挺好的一个小案例,不过需要挺多逻辑处理!
下面本人的实现思路:
布局方面:使用网格GridLayout布局,除了显示数据的textView,其他都是button,使用xml设置好,添加到res。
事件方面:通过findViewBy在R.id.xxx,拿到上面添加到resource库里面的控件,创建对象并添加对应的点击处理方法。这里我是把所有按钮都放在一个click类处理,通过switch对比传进来的view(即button)是哪个id,做出不同的点击方法。
下面说说计算器实现要考虑的点
1+1 =2 这时候2可以继续加上去或其他符号操作
1 + * -连续点几个操作符,只能筛选出最后一个操作符,并且可以继续计算操作
1 + 然后按等号,应该变成2,1 - 然后按等号应该变成0,乘除也一样。
做除法运算的时候,分母不能为0,否则输出error,window和ios计算器都会提示
小数点的处理
下面先上XML布局代码 ,挺多重复东西的,可以直接拉下去。
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"
tools:context=".MainActivity">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"
/>
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
app:srcCompat="@android:drawable/ic_dialog_email" />
//下面才是重点
xmlns:tools="http://schemas.android.com/tools"
android:layout_marginLeft="64dp"
android:layout_marginTop="200dp"
android:id="@+id/GridLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:columnCount="4"
android:orientation="horizontal"
android:rowCount="6" >
android:id="@+id/resultText"
android:layout_columnSpan="4"
android:layout_gravity="fill"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:background="@android:color/holo_blue_bright"
android:textColor="@android:color/white"
android:textFontWeight="0.5"
android:text="0"
android:textSize="50sp" />
android:id = "@+id/buttonBack"
android:layout_columnSpan="2"
android:layout_gravity="fill"
android:text="回退" />
android:id = "@+id/buttonClear"
android:layout_columnSpan="2"
android:layout_gravity="fill"
android:text="清空" />
android:id = "@+id/plus"
android:text="+" />
android:id = "@+id/one"
android:text="1" />
android:id = "@+id/two"
android:text="2" />
android:text="3" />
android:id = "@+id/subtract"
android:text="-" />
android:id = "@+id/four"
android:text="4" />
android:id = "@+id/five"
android:text="5" />
android:id = "@+id/six"
android:text="6" />
android:id = "@+id/multiply"
android:text="*" />
android:id = "@+id/seven"
android:text="7" />
android:id = "@+id/eight"
android:text="8" />
android:id = "@+id/nine"
android:text="9" />
android:id = "@+id/divide"
android: