Android :实现⼀个计算器--(四则运算)
计算器的功能介绍:
Dot 的效果展⽰:侃侃 Dot:改进的地⽅:不⾜的地⽅:
补充知识:android 中的事件处理步骤
如何将信息显⽰到 View(EditText)上:
异常的类型:
Name: Dot (从某点开始,到某点结束)
功能: + 、- 、* 、/ 、%
(清零,退格操作)
版本:1.0
Dot 与其他的计算器相⽐没有太⼤的竞争⼒,甚⾄在处理⼀些极端的问题时还存在很⼤的不⾜,
例如:⼤数的四则运算,对于这个问题处理的还不够到位,⽬前只能实现⼀些简单的四则运算
(只能说⾃⼰的⽔平太菜,还没有掌握⼀些实质性的内容,这个是⾃⼰需要检讨的)
另外:
⾮常感谢 Android ⽼师教给我们的知识,使我们可以设计出第⼀款属于⾃⼰的 app.
相对于最原始的设计,更新了哪些东西呢?
1、改变按钮的形状,由原始的长⽅形 -- 椭圆状,使得按钮更加形象化。
2、增加背景图⽚,使⽤户的体验效果更好。
3、增加退格操作,使得⽤户在输错信息时不⽤全盘清零,可以删除刚刚写的某个字符。
1、未实现⼀些⼤数的运算。
2、当退格退完后,再按退格时会⾃动退出(不影响总体效果,但还是有那么⼀点 bug )
3、⽬前两个数操作就需要 '=' ⼀下,但是可以实现多项式的运算,只是每次都需要 '='
(后续会进⾏修改,逐渐完善)
a 、到事件⽬标对象(Button),通过 findViewById(),遍历⼦对象。
b 、实现ClickLisenter 接⼝,重写 onClick ⽅法。
c 、在事件⽬标对象上注册,btn.setOnClickListener (实现类的对象)
a 、为 EditText 定义 id -- etResult
b 、通过 findViewById 获取 etResult 对象
c 、通过 etResult.setText() 将信息显⽰到计算器界⾯上
a 、RuntimeException
a、RuntimeException
运⾏时异常,不要求处理(但最好处理⼀下),与业务相关,⽐较主观(每个应⽤都可以采⽤⾃⼰的⽅式进⾏处理),⼀般不严重, 对效果不会产⽣太⼤的影响。
b、Checked Exception:
检查异常,必须处理,⾮业务类型的错误,⽐较客观,⽐较严重,会影响程序的执⾏。
代码部分:
l:
在 layout ⾥⾯新建⼀个⽂件l(布局类型是 GridLayout)
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="schemas.android/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:rowCount="6"
android:columnCount="1"
android:orientation="horizontal"
android:id="@+id/gridlayout"
android:background="@mipmap/bg">
<EditText android:hint="Welcome"
android:id="@+id/edResult"
android:background="#2FC6CAC2"
android:textColor="#3949AB"
android:textColorHint="#3949AB"
android:layout_gravity="fill_horizontal"
android:gravity="right"
android:paddingBottom="24dp"
android:paddingTop="24dp"
android:textSize="30sp"
/>
<!-- 使⽤线性布局实现按钮的等⽐例⽐重分配,每⼀⾏的按钮为⼀组-->
<LinearLayout android:layout_gravity="fill_horizontal">
<Button
android:text="AC"
android:textSize="20sp"
android:textColor="#E61111"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="8dp"
android:background="@drawable/yuanbtn"
/>
用java编写一个简单的计算器
<Button
android:text="Del"
android:textSize="20sp"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="8dp"
android:background="@drawable/yuanbtn"
/>
<Button
android:text="+/-"
android:textSize="20sp"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="8dp"
android:background="@drawable/yuanbtn"/>
<Button android:text="/"
android:textSize="20sp"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="8dp"
android:background="@drawable/yuanbtn"/>
</LinearLayout>
<LinearLayout android:layout_gravity="fill_horizontal">
<Button android:text="7"
android:textSize="20sp"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="8dp"
android:background="@drawable/yuanbtn"/>
<Button android:text="8"
android:textSize="20sp"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="8dp"
android:background="@drawable/yuanbtn"/>
<Button android:text="9"
android:textSize="20sp"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="8dp"
android:background="@drawable/yuanbtn"/>
android:background="@drawable/yuanbtn"/>
<Button android:text="*"
android:textSize="20sp"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="8dp"
android:background="@drawable/yuanbtn"/>
</LinearLayout>
<LinearLayout android:layout_gravity="fill_horizontal"> <Button android:text="4"
android:textSize="20sp"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="8dp"
android:background="@drawable/yuanbtn"/>
<Button android:text="5"
android:textSize="20sp"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="8dp"
android:background="@drawable/yuanbtn"/>
<Button android:text="6"
android:textSize="20sp"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="8dp"
android:background="@drawable/yuanbtn"/>
<Button android:text="-"
android:textSize="20sp"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="8dp"
android:background="@drawable/yuanbtn"/>
</LinearLayout>
<LinearLayout android:layout_gravity="fill_horizontal"> <Button android:text="1"
android:textSize="20sp"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="8dp"
android:background="@drawable/yuanbtn"/>
<Button android:text="2"
android:textSize="20sp"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="8dp"
android:background="@drawable/yuanbtn"/>
<Button
android:text = "3"
android:textSize="20sp"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="8dp"
android:background="@drawable/yuanbtn"
/>
<Button
android:text = "+"
android:textSize="20sp"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="8dp"
android:background="@drawable/yuanbtn"
/>
</LinearLayout>
<LinearLayout android:layout_gravity="fill_horizontal"> <Button
android:text = "%"
android:textSize="20sp"
android:id="@+id/btn_1"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="8dp"
android:background="@drawable/yuanbtn"
/>
<Button
android:text = "0"
android:textSize="20sp"
android:textSize="20sp"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="8dp"
android:background="@drawable/yuanbtn"
/>
<Button
android:text = "."
android:textSize="20sp"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="8dp"
android:background="@drawable/yuanbtn"
/>
<Button
android:text = "="
android:textColor="#039BE5"
android:textSize="20sp"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="8dp"
android:background="@drawable/yuanbtn"
/>
</LinearLayout>
</GridLayout>
在drawable ⽂件夹下新建⼀个l⽂件,⽤来实现椭圆形的按钮。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="schemas.android/apk/res/android">
<item>
<shape
xmlns:android="schemas.android/apk/res/android"
>
<!-- 填充的颜⾊ -->
<solid android:color="#DDCBCB" />
<!-- 设置按钮的四个⾓为弧形 -->
<!-- android:radius 弧形的半径 -->
<corners android:radius="105dip"/>
<!-- padding: Button ⾥⾯的⽂字与Button边界的间隔 -->
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp"
/>
</shape>
</item>
</selector>
MainActivity.java
ample.second;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridLayout;
import android.widget.LinearLayout;
import androidx.appcompat.app.AppCompatActivity;
/*
* 程序代码、布局⽂件、⼆者之间的关系?
* 程序代码:处理逻辑
* 布局⽂件:设计界⾯的(UI)
* 相辅相成,为什么要这样呢?
* 1、容易分⼯,代码清晰
* 2、代码复⽤
* 如何加载?
* 类似充⽓(⽓球 -- 原来是⼀个空⽩界⾯,然后各个组件组合起来形成⼀个 good View) * */
public class MainActivity extends AppCompatActivity implements View.OnClickListener{ GridLayout gridLayout;
EditText edResult; // 计算器的显⽰界⾯
protected void onCreate(Bundle savedInstanceState){
protected void onCreate(Bundle savedInstanceState){
// R 相当于是⼀个总类(静态 -- 全局),我们后⾯⽤到的 calculate_layout 相当于是其属性,(都是我们⾃⼰写的⽂件) // 加载布局⽂件、初始化布局对象,进⾏充⽓
setContentView(R.layout.calculate_layout);
// 通过 id 到我们想要进⾏操作的对象
edResult = findViewById(R.id.edResult);
gridLayout = findViewById(idlayout);
int rowSize = ChildCount();
for (int i = 1; i < rowSize; i++) {
LinearLayout view = (LinearLayout) ChildAt(i);
int colSize = ChildCount();
for (int j = 0; j < colSize; j++) {
// 此时 Button 是事件⽬标
Button button = (Button) ChildAt(j);
// 当我们点击某个按钮时就会触发这个事件
button.setOnClickListener(this);
}
}
}
String currentNumber = ""; // 当前数字
String previousNumber = ""; // 前⼀个数字
String operator = ""; // 符号
// 这⾥相当于是后台,前台通过客户触发某个按钮,然后我们后台得到这个按钮的内容
// 进⾏相应的处理
public void onClick(View view) {
// view 此时是事件源(事件的源头) -- 参照的位置不⼀样
if(view instanceof Button) {
// 向下进⾏强制转换
Button button = (Button)view;
// 得到按钮的内容
String btnStr = Text().toString();
Log.i("calculator__",btnStr);
switch (btnStr) {
case "0":
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
case ".":
// 字符串的拼接
currentNumber += btnStr;
// 将内容显⽰到 EditText
edResult.setText(currentNumber);
break;
case"+":
operator = btnStr;
previousNumber = currentNumber;
currentNumber = "";
break;
case"-":
operator = btnStr;
previousNumber = currentNumber;
currentNumber = "";
break;
case"*":
operator = btnStr;
previousNumber = currentNumber;
currentNumber = "";
break;
case"/":
operator = btnStr;
previousNumber = currentNumber;
currentNumber = "";
break;
case"%":
operator = btnStr;
previousNumber = currentNumber;
currentNumber = "";
break;
case"Del":
// 采⽤字符串截取的⽅式实现退格操作
currentNumber = currentNumber.substring(0,currentNumber.length() - 1);
edResult.setText(currentNumber);
break;
case"AC":
// 清空数据
operator = "";
currentNumber = "";
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论