实现功能:
简单计算器
布局及美化
采用LinearLayout嵌套LinearLayout实现布局。
要求
1. 按钮所有文字居于右下角
2. 按钮为白色,点击变成橘色
3. 显示屏文字居右显示并且为橘色
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center"> <!-- 显示屏组件 --> <EditText android:id="@+id/et_input" android:layout_width="330dp" android:layout_height="wrap_content" android:editable="false" android:gravity="right" android:textColor="#ffbf16"/> <!-- 一个垂直线性布局,用来放置所有按钮 --> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="10dp" android:gravity="center_horizontal" android:orientation="vertical"> <!-- 一个水平线性布局,用来放置C DEL ÷ × --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal"> <Button android:id="@+id/btn_clear" android:layout_width="75dp" android:layout_height="75dp" android:background="@drawable/white_btn_selector" android:gravity="right|bottom" android:text="C " android:textSize="25sp" /> <Button android:id="@+id/btn_del" android:layout_width="75dp" android:layout_height="75dp" android:layout_marginLeft="10dp" android:background="@drawable/white_btn_selector" android:gravity="right|bottom" android:text="DEL " android:textSize="25sp" /> <Button android:id="@+id/btn_divide" android:layout_width="75dp" android:layout_height="75dp" android:layout_marginLeft="10dp" android:background="@drawable/white_btn_selector" android:gravity="right|bottom" android:text="÷ " android:textSize="25sp" /> <Button android:id="@+id/btn_multiply" android:layout_width="75dp" android:layout_height="75dp" android:layout_marginLeft="10dp" android:background="@drawable/white_btn_selector" android:gravity="right|bottom" android:text="× " android:textSize="25sp" /> </LinearLayout> <!-- 一个水平线性布局,用来放置7 8 9 - --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:gravity="center_horizontal" android:orientation="horizontal"> <Button android:id="@+id/btn_7" android:layout_width="75dp" android:layout_height="75dp" android:background="@drawable/white_btn_selector" android:gravity="right|bottom" android:text="7 " android:textSize="25sp" /> <Button android:id="@+id/btn_8" android:layout_width="75dp" android:layout_height="75dp" android:layout_marginLeft="10dp" android:background="@drawable/white_btn_selector" android:gravity="right|bottom" android:text="8 " android:textSize="25sp" /> <Button android:id="@+id/btn_9" android:layout_width="75dp" android:layout_height="75dp" android:layout_marginLeft="10dp" android:background="@drawable/white_btn_selector" android:gravity="right|bottom" android:text="9 " android:textSize="25sp" /> <Button android:id="@+id/btn_minus" android:layout_width="75dp" android:layout_height="75dp" android:layout_marginLeft="10dp" android:background="@drawable/white_btn_selector" android:gravity="right|bottom" android:text="- " android:textSize="25sp" /> </LinearLayout> <!-- 一个水平线性布局,用来放置4 5 6 7 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:gravity="center_horizontal" android:orientation="horizontal"> <Button android:id="@+id/btn_4" android:layout_width="75dp" android:layout_height="match_parent" android:background="@drawable/white_btn_selector" android:gravity="right|bottom" android:text="4 " android:textSize="25sp" /> <Button android:id="@+id/btn_5" android:layout_width="75dp" android:layout_height="75dp" android:layout_marginLeft="10dp" android:background="@drawable/white_btn_selector" android:gravity="right|bottom" android:text="5 " android:textSize="25sp" /> <Button android:id="@+id/btn_6" android:layout_width="75dp" android:layout_height="75dp" android:layout_marginLeft="10dp" android:background="@drawable/white_btn_selector" android:gravity="right|bottom" android:text="6 " android:textSize="25sp" /> <Button android:id="@+id/btn_sum" android:layout_width="75dp" android:layout_height="75dp" android:layout_marginLeft="10dp" android:background="@drawable/white_btn_selector" android:gravity="right|bottom" android:text="+ " android:textSize="25sp" /> </LinearLayout> <!-- 一个水平布局,用来放置剩余按钮 --> <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="horizontal"> <!-- 一个垂直布局,用来放置1 2 3 0 . 按钮 --> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- 一个水平布局,用来放置1 2 3 按钮 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:orientation="horizontal"> <Button android:id="@+id/btn_1" android:layout_width="75dp" android:layout_height="75dp" android:background="@drawable/white_btn_selector" android:gravity="right|bottom" android:text="1 " android:textSize="25sp" /> <Button android:id="@+id/btn_2" android:layout_width="75dp" android:layout_height="75dp" android:layout_marginLeft="10dp" android:background="@drawable/white_btn_selector" android:gravity="right|bottom" android:text="2 " android:textSize="25sp" /> <Button android:id="@+id/btn_3" android:layout_width="75dp" android:layout_height="75dp" android:layout_marginLeft="10dp" android:background="@drawable/white_btn_selector" android:gravity="right|bottom" android:text="3 " android:textSize="25sp" /> </LinearLayout> <!-- 一个水平布局,用来放置0 . 按钮 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:gravity="center_horizontal" android:orientation="horizontal"> <Button android:id="@+id/btn_0" android:layout_width="160dp" android:layout_height="75dp" android:background="@drawable/white_btn_selector" android:gravity="right|bottom" android:text="0 " android:textSize="25sp" /> <Button android:id="@+id/btn_point" android:layout_width="75dp" android:layout_height="75dp" android:layout_marginLeft="10dp" android:background="@drawable/white_btn_selector" android:gravity="right|bottom" android:text=". " android:textSize="25sp" /> </LinearLayout> </LinearLayout> <Button android:id="@+id/btn_equal" android:layout_width="75dp" android:layout_height="160dp" android:layout_marginLeft="10dp" android:layout_marginTop="10dp" android:background="@drawable/white_btn_selector" android:gravity="right|bottom" android:text="= " android:textSize="25sp" /> </LinearLayout> </LinearLayout> </LinearLayout>
white_btn_selector.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_selected="true" android:drawable="@drawable/orange"/> <item android:state_focused="true" android:drawable="@drawable/orange" /> <item android:state_pressed="true" android:drawable="@drawable/orange" /> <item android:drawable="@drawable/white"/> </selector>
orange.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#ffbf20"/> </shape>
white.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#ffffff"/> <corners android:radius="2.0dp" /> </shape>
运行结果:
逻辑实现
MainActivity.java
package cn.lixyz.counterdemo; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; public class MainActivity extends Activity implements View.OnClickListener { Button btn_0; //0数字按钮 Button btn_1; //1数字按钮 Button btn_2; //2数字按钮 Button btn_3; //3数字按钮 Button btn_4; //4数字按钮 Button btn_5; //5数字按钮 Button btn_6; //6数字按钮 Button btn_7; //7数字按钮 Button btn_8; //8数字按钮 Button btn_9; //9数字按钮 Button btn_point; //小数点按钮 Button btn_clear; //clear数字按钮 Button btn_del; //delete数字按钮 Button btn_sum; //加按钮 Button btn_minus; //减按钮 Button btn_multiply; //乘按钮 Button btn_divide; //除按钮 Button btn_equal; //等于按钮 String[] arr = new String[]{"+", "-", "×", "÷"}; EditText et_input;//显示屏 boolean clear_flag = true;//清空标识 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //实例化按钮 btn_0 = (Button) findViewById(R.id.btn_0); btn_1 = (Button) findViewById(R.id.btn_1); btn_2 = (Button) findViewById(R.id.btn_2); btn_3 = (Button) findViewById(R.id.btn_3); btn_4 = (Button) findViewById(R.id.btn_4); btn_5 = (Button) findViewById(R.id.btn_5); btn_6 = (Button) findViewById(R.id.btn_6); btn_7 = (Button) findViewById(R.id.btn_7); btn_8 = (Button) findViewById(R.id.btn_8); btn_9 = (Button) findViewById(R.id.btn_9); btn_multiply = (Button) findViewById(R.id.btn_multiply); btn_point = (Button) findViewById(R.id.btn_point); btn_clear = (Button) findViewById(R.id.btn_clear); btn_del = (Button) findViewById(R.id.btn_del); btn_sum = (Button) findViewById(R.id.btn_sum); btn_minus = (Button) findViewById(R.id.btn_minus); btn_divide = (Button) findViewById(R.id.btn_divide); btn_equal = (Button) findViewById(R.id.btn_equal); //实例化显示屏 et_input = (EditText) findViewById(R.id.et_input); //设置这些按钮的点击事件 btn_0.setOnClickListener(this); btn_1.setOnClickListener(this); btn_2.setOnClickListener(this); btn_3.setOnClickListener(this); btn_4.setOnClickListener(this); btn_5.setOnClickListener(this); btn_6.setOnClickListener(this); btn_7.setOnClickListener(this); btn_8.setOnClickListener(this); btn_9.setOnClickListener(this); btn_multiply.setOnClickListener(this); btn_point.setOnClickListener(this); btn_clear.setOnClickListener(this); btn_del.setOnClickListener(this); btn_sum.setOnClickListener(this); btn_minus.setOnClickListener(this); btn_divide.setOnClickListener(this); btn_equal.setOnClickListener(this); } @Override public void onClick(View v) { //获取目前显示屏上显示的数字,因为为了美观,在布局时,Text属性添加了空格,所以在获取到按钮内容之后,需要去掉空格 String str = et_input.getText().toString(); switch (v.getId()) { //如果点击的是0~9或者小数点,直接累加到屏幕上 case R.id.btn_0: case R.id.btn_1: case R.id.btn_2: case R.id.btn_3: case R.id.btn_4: case R.id.btn_5: case R.id.btn_6: case R.id.btn_7: case R.id.btn_8: case R.id.btn_9: case R.id.btn_point: case R.id.btn_sum: case R.id.btn_minus: case R.id.btn_divide: case R.id.btn_multiply: //因为传入的是一个View对象,所以需要强制转换为Button对象,才能使用getText()方法 if (clear_flag) { et_input.setText(str + ((Button) v).getText()); } else { et_input.setText(((Button) v).getText()); clear_flag = true; } Log.d("TEST", ((Button) v).getText().toString() + " " + clear_flag + ""); break; //如果点击的是C,则将显示屏设置为空 case R.id.btn_clear: et_input.setText(""); break; //如果点击的是DEL,如果显示屏不为空,则将显示屏的内容最后一个字符去掉 case R.id.btn_del: if (str != null && !str.equals("")) { et_input.setText(et_input.getText().toString().substring(0, str.length() - 1)); } break; //如果点击的是等号,则进行运算,判断显示屏上的内容是否存在运算,如果不存在,直接显示当前文字,如果存在运算,进行运算,显示结果 case R.id.btn_equal: for (int i = 0; i <= arr.length-1; i++) { if (et_input.getText().toString().contains(arr[i])) { getResult(et_input.getText().toString()); break; } } // et_input.setText(str); clear_flag = false; break; } } //运算方法 public void getResult(String string) { Log.d("TEST", string); String[] arr2; Double d1; Double d2; if (string.contains("+")) { arr2 = string.split("\+"); if (arr2[0].trim().length() == 0) { d1 = 0.0; } else { d1 = Double.parseDouble(arr2[0].replace(" ", "")); } if (arr2[1].trim().length() == 0) { d2 = d1; } else { d2 = Double.parseDouble(arr2[1].replace(" ", "")); } et_input.setText((d1 + d2) + ""); } else if (string.contains("-")) { arr2 = string.split("\-"); if (arr2[0].trim().length() == 0) { d1 = 0.0; } else { d1 = Double.parseDouble(arr2[0].replace(" ", "")); } if (arr2[1].trim().length() == 0) { d2 = d1; } else { d2 = Double.parseDouble(arr2[1].replace(" ", "")); } et_input.setText((d1 - d2) + ""); } else if (string.contains("×")) { arr2 = string.split("\×"); if (arr2[0].trim().length() == 0) { d1 = 0.0; } else { d1 = Double.parseDouble(arr2[0].replace(" ", "")); } if (arr2[1].trim().length() == 0) { d2 = d1; } else { d2 = Double.parseDouble(arr2[1].replace(" ", "")); } et_input.setText((d1 * d2) + ""); } else if (string.contains("÷")) { arr2 = string.split("\÷"); if (arr2[0].trim().length() == 0) { d1 = 0.0; } else { d1 = Double.parseDouble(arr2[0].replace(" ", "")); } if (arr2[1].trim().length() == 0) { d2 = d1; } else { d2 = Double.parseDouble(arr2[1].replace(" ", "")); } if (d2 == 0) { et_input.setText("除数不能为0"); } else { et_input.setText((d1 / d2) + ""); } } } }