Android簡(jiǎn)單實(shí)現(xiàn)計(jì)算器功能
本文實(shí)例為大家分享了Android簡(jiǎn)單實(shí)現(xiàn)計(jì)算器的具體代碼,供大家參考,具體內(nèi)容如下
一、UI布局及代碼
- 頁(yè)面效果
- 布局代碼
<?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:weightSum="8"> ? ? <TextView ? ? ? ? android:layout_width="match_parent" ? ? ? ? android:layout_height="0dp" ? ? ? ? android:id="@+id/text_view" ? ? ? ? android:layout_weight="2" ? ? ? ? android:textSize="70dp" ? ? ? ? android:gravity="right|bottom" ? ? ? ? android:maxLines="2" /> ? ? <TextView ? ? ? ? android:id="@+id/result_view" ? ? ? ? android:layout_width="match_parent" ? ? ? ? android:layout_height="0dp" ? ? ? ? android:layout_weight="1" ? ? ? ? android:gravity="right|bottom" ? ? ? ? android:maxLines="1" ? ? ? ? android:textSize="65dp" /> ? ? <LinearLayout ? ? ? ? android:layout_width="match_parent" ? ? ? ? android:layout_height="0dp" ? ? ? ? android:layout_weight="1" ? ? ? ? android:orientation="horizontal" ? ? ? ? android:weightSum="5"> ? ? ? ? <Button ? ? ? ? ? ? android:layout_width="0dp" ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? android:id="@+id/button_ac" ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? android:text="AC" ? ? ? ? ? ? android:background="#ff0000" ? ? ? ? ? ? android:textColor="#000" ? ? ? ? ? ? android:textSize="20dp" ? ? ? ? ? ? android:layout_margin="5dp" /> ? ? ? ? <Button ? ? ? ? ? ? android:layout_width="0dp" ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? android:id="@+id/button_left" ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? android:text="(" ? ? ? ? ? ? android:background="#fff" ? ? ? ? ? ? android:textColor="#000" ? ? ? ? ? ? android:textSize="30dp" ? ? ? ? ? ? android:layout_margin="5dp"/> ? ? ? ? <Button ? ? ? ? ? ? android:layout_width="0dp" ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? android:id="@+id/button_right" ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? android:text=")" ? ? ? ? ? ? android:background="#fff" ? ? ? ? ? ? android:textColor="#000" ? ? ? ? ? ? android:textSize="30dp" ? ? ? ? ? ? android:layout_margin="5dp"/> ? ? ? ? <Button ? ? ? ? ? ? android:layout_width="0dp" ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? android:id="@+id/button_divide" ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? android:text="/" ? ? ? ? ? ? android:background="#fffaf0" ? ? ? ? ? ? android:textColor="#000" ? ? ? ? ? ? android:textSize="30dp" ? ? ? ? ? ? android:layout_margin="5dp"/> ? ? ? ? <Button ? ? ? ? ? ? android:layout_width="0dp" ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? android:id="@+id/button_del" ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? android:text="DEL" ? ? ? ? ? ? android:background="#808a87" ? ? ? ? ? ? android:textColor="#000" ? ? ? ? ? ? android:textSize="15dp" ? ? ? ? ? ? android:layout_margin="5dp"/> ? ? </LinearLayout> ? ? <LinearLayout ? ? ? ? android:layout_width="match_parent" ? ? ? ? android:layout_height="0dp" ? ? ? ? android:layout_weight="1" ? ? ? ? android:orientation="horizontal" ? ? ? ? android:weightSum="4"> ? ? ? ? <Button ? ? ? ? ? ? android:layout_width="0dp" ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? android:id="@+id/button_7" ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? android:text="7" ? ? ? ? ? ? android:textColor="#000" ? ? ? ? ? ? android:textSize="30dp" ? ? ? ? ? ? android:layout_margin="5dp"/> ? ? ? ? <Button ? ? ? ? ? ? android:layout_width="0dp" ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? android:id="@+id/button_8" ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? android:text="8" ? ? ? ? ? ? android:textColor="#000" ? ? ? ? ? ? android:textSize="30dp" ? ? ? ? ? ? android:layout_margin="5dp"/> ? ? ? ? <Button ? ? ? ? ? ? android:layout_width="0dp" ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? android:id="@+id/button_9" ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? android:text="9" ? ? ? ? ? ? android:textColor="#000" ? ? ? ? ? ? android:textSize="30dp" ? ? ? ? ? ? android:layout_margin="5dp"/> ? ? ? ? <Button ? ? ? ? ? ? android:layout_width="0dp" ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? android:id="@+id/button_mult" ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? android:text="*" ? ? ? ? ? ? android:background="#fffaf0" ? ? ? ? ? ? android:textColor="#000" ? ? ? ? ? ? android:textSize="30dp" ? ? ? ? ? ? android:layout_margin="5dp"/> ? ? </LinearLayout> ? ? <LinearLayout ? ? ? ? android:layout_width="match_parent" ? ? ? ? android:layout_height="0dp" ? ? ? ? android:layout_weight="1" ? ? ? ? android:orientation="horizontal" ? ? ? ? android:weightSum="4"> ? ? ? ? <Button ? ? ? ? ? ? android:layout_width="0dp" ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? android:id="@+id/button_4" ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? android:text="4" ? ? ? ? ? ? android:textColor="#000" ? ? ? ? ? ? android:textSize="30dp" ? ? ? ? ? ? android:layout_margin="5dp"/> ? ? ? ? <Button ? ? ? ? ? ? android:layout_width="0dp" ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? android:id="@+id/button_5" ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? android:text="5" ? ? ? ? ? ? android:textColor="#000" ? ? ? ? ? ? android:textSize="30dp" ? ? ? ? ? ? android:layout_margin="5dp"/> ? ? ? ? <Button ? ? ? ? ? ? android:layout_width="0dp" ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? android:id="@+id/button_6" ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? android:text="6" ? ? ? ? ? ? android:textColor="#000" ? ? ? ? ? ? android:textSize="30dp" ? ? ? ? ? ? android:layout_margin="5dp"/> ? ? ? ? <Button ? ? ? ? ? ? android:layout_width="0dp" ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? android:id="@+id/button_add" ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? android:text="+" ? ? ? ? ? ? android:background="#fffaf0" ? ? ? ? ? ? android:textColor="#000" ? ? ? ? ? ? android:textSize="30dp" ? ? ? ? ? ? android:layout_margin="5dp"/> ? ? </LinearLayout> ? ? <LinearLayout ? ? ? ? android:layout_width="match_parent" ? ? ? ? android:layout_height="0dp" ? ? ? ? android:layout_weight="1" ? ? ? ? android:orientation="horizontal" ? ? ? ? android:weightSum="4"> ? ? ? ? <Button ? ? ? ? ? ? android:layout_width="0dp" ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? android:id="@+id/button_1" ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? android:text="1" ? ? ? ? ? ? android:textColor="#000" ? ? ? ? ? ? android:textSize="30dp" ? ? ? ? ? ? android:layout_margin="5dp"/> ? ? ? ? <Button ? ? ? ? ? ? android:layout_width="0dp" ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? android:id="@+id/button_2" ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? android:text="2" ? ? ? ? ? ? android:textColor="#000" ? ? ? ? ? ? android:textSize="30dp" ? ? ? ? ? ? android:layout_margin="5dp"/> ? ? ? ? <Button ? ? ? ? ? ? android:layout_width="0dp" ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? android:id="@+id/button_3" ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? android:text="3" ? ? ? ? ? ? android:textColor="#000" ? ? ? ? ? ? android:textSize="30dp" ? ? ? ? ? ? android:layout_margin="5dp"/> ? ? ? ? <Button ? ? ? ? ? ? android:layout_width="0dp" ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? android:id="@+id/button_minus" ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? android:text="-" ? ? ? ? ? ? android:background="#fffaf0" ? ? ? ? ? ? android:textColor="#000" ? ? ? ? ? ? android:textSize="30dp" ? ? ? ? ? ? android:layout_margin="5dp"/> ? ? </LinearLayout> ? ? <LinearLayout ? ? ? ? android:layout_width="match_parent" ? ? ? ? android:layout_height="0dp" ? ? ? ? android:layout_weight="1" ? ? ? ? android:orientation="horizontal" ? ? ? ? android:weightSum="4"> ? ? ? ? <Button ? ? ? ? ? ? android:layout_width="0dp" ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? android:id="@+id/button_0" ? ? ? ? ? ? android:layout_weight="2" ? ? ? ? ? ? android:text="0" ? ? ? ? ? ? android:textColor="#000" ? ? ? ? ? ? android:textSize="30dp" ? ? ? ? ? ? android:layout_margin="5dp"/> ? ? ? ? <Button ? ? ? ? ? ? android:layout_width="0dp" ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? android:id="@+id/button_dot" ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? android:text="." ? ? ? ? ? ? android:textColor="#000" ? ? ? ? ? ? android:textSize="30dp" ? ? ? ? ? ? android:layout_margin="5dp"/> ? ? ? ? <Button ? ? ? ? ? ? android:layout_width="0dp" ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? android:id="@+id/button_result" ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? android:text="=" ? ? ? ? ? ? android:background="#ff6347" ? ? ? ? ? ? android:textColor="#fff" ? ? ? ? ? ? android:textSize="30dp" ? ? ? ? ? ? android:layout_margin="5dp"/> ? ? </LinearLayout> </LinearLayout>
- 解析
1、布局使用LinearLayout布局,android:orientation="vertical"指定垂直布局,從上至下依次是表達(dá)式顯示框,結(jié)果顯示框以及五行按鈕,并指定總權(quán)重方便控制顯示。
2、文本框TextView使用android:gravity="right|bottom"指定其從右下開(kāi)始顯示內(nèi)容。
3、在按鈕上,使用android:background="#ff0000"指定按鈕背景顏色,使用android:layout_margin="5dp"控制偏移,使其不會(huì)過(guò)于緊湊。(關(guān)于按鈕背景顏色無(wú)法設(shè)置,可在res//values//themes.xml文件下將代碼<style name="Theme.Calculation" parent="Theme.MaterialComponents.DayNight.DarkActionBar.">
改為<style name="Theme.Calculation" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">)
二、計(jì)算器邏輯設(shè)計(jì)
- 代碼部分
package com.example.calculation; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.TypedValue; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.math.BigDecimal; import java.util.LinkedList; import java.util.Queue; import java.util.Stack; public class MainActivity extends AppCompatActivity implements View.OnClickListener { ? ? private final StringBuilder sb = new StringBuilder();//用于表達(dá)式的輸入 ? ? private String expression = "";//最終表達(dá)式的確定 ? ? private String result = "";//計(jì)算結(jié)果 ? ? private boolean isHasDot = false;//是否有小數(shù)點(diǎn) ? ? private final Stack<Boolean> dotStack = new Stack<>(); ? ? //用棧存儲(chǔ)每一個(gè)數(shù)字是否有小數(shù)點(diǎn) ? ? private boolean isZero = false;//是否是數(shù)字零 ? ? private final Stack<Boolean> zeroStack = new Stack<>(); ? ? private int leftNum = 0;//左括號(hào)數(shù)量 ? ? private int rightNum = 0;//右括號(hào)數(shù)量 ? ? private TextView textView; ? ? private TextView result_view; ? ? @Override ? ? protected void onCreate(Bundle savedInstanceState) { ? ? ? ? super.onCreate(savedInstanceState); ? ? ? ? setContentView(R.layout.activity_main); ? ? ? ? textView = (TextView) findViewById(R.id.text_view); ? ? ? ? textView.setAutoSizeTextTypeUniformWithConfiguration(4, 70, 10, TypedValue.COMPLEX_UNIT_DIP); ? ? ? ? //將顯示框設(shè)置為根據(jù)行數(shù)自動(dòng)縮小 ? ? ? ? result_view = (TextView) findViewById(R.id.result_view); ? ? ? ? result_view.setAutoSizeTextTypeUniformWithConfiguration(4, 70, 10, TypedValue.COMPLEX_UNIT_DIP); ? ? ? ? Button button1 = (Button) findViewById(R.id.button_1); ? ? ? ? button1.setOnClickListener(this); ? ? ? ? Button button2 = (Button) findViewById(R.id.button_2); ? ? ? ? button2.setOnClickListener(this); ? ? ? ? Button button3 = (Button) findViewById(R.id.button_3); ? ? ? ? button3.setOnClickListener(this); ? ? ? ? Button button4 = (Button) findViewById(R.id.button_4); ? ? ? ? button4.setOnClickListener(this); ? ? ? ? Button button5 = (Button) findViewById(R.id.button_5); ? ? ? ? button5.setOnClickListener(this); ? ? ? ? Button button6 = (Button) findViewById(R.id.button_6); ? ? ? ? button6.setOnClickListener(this); ? ? ? ? Button button7 = (Button) findViewById(R.id.button_7); ? ? ? ? button7.setOnClickListener(this); ? ? ? ? Button button8 = (Button) findViewById(R.id.button_8); ? ? ? ? button8.setOnClickListener(this); ? ? ? ? Button button9 = (Button) findViewById(R.id.button_9); ? ? ? ? button9.setOnClickListener(this); ? ? ? ? Button button0 = (Button) findViewById(R.id.button_0); ? ? ? ? button0.setOnClickListener(this); ? ? ? ? Button buttondot = (Button) findViewById(R.id.button_dot); ? ? ? ? buttondot.setOnClickListener(this); ? ? ? ? Button buttonadd = (Button) findViewById(R.id.button_add); ? ? ? ? buttonadd.setOnClickListener(this); ? ? ? ? Button buttonminus = (Button) findViewById(R.id.button_minus); ? ? ? ? buttonminus.setOnClickListener(this); ? ? ? ? Button buttonmult = (Button) findViewById(R.id.button_mult); ? ? ? ? buttonmult.setOnClickListener(this); ? ? ? ? Button buttondivide = (Button) findViewById(R.id.button_divide); ? ? ? ? buttondivide.setOnClickListener(this); ? ? ? ? Button buttonac = (Button) findViewById(R.id.button_ac); ? ? ? ? buttonac.setOnClickListener(this); ? ? ? ? Button buttondel = (Button) findViewById(R.id.button_del); ? ? ? ? buttondel.setOnClickListener(this); ? ? ? ? Button buttonleft = (Button) findViewById(R.id.button_left); ? ? ? ? buttonleft.setOnClickListener(this); ? ? ? ? Button buttonright = (Button) findViewById(R.id.button_right); ? ? ? ? buttonright.setOnClickListener(this); ? ? ? ? Button buttonresult = (Button) findViewById(R.id.button_result); ? ? ? ? buttonresult.setOnClickListener(this); ? ? } ? ? @Override ? ? public void onClick(View v) { ? ? ? ? result_view.setText(""); ? ? ? ? switch (v.getId()) { ? ? ? ? ? ? case R.id.button_1: ? ? ? ? ? ? ? ? if (isZero == true) { ? ? ? ? ? ? ? ? ? ? sb.deleteCharAt(sb.length() - 1); ? ? ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? sb.append('1'); ? ? ? ? ? ? ? ? textView.setText(sb.toString()); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case R.id.button_2: ? ? ? ? ? ? ? ? if (isZero == true) { ? ? ? ? ? ? ? ? ? ? sb.deleteCharAt(sb.length() - 1); ? ? ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? sb.append('2'); ? ? ? ? ? ? ? ? textView.setText(sb.toString()); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case R.id.button_3: ? ? ? ? ? ? ? ? if (isZero == true) { ? ? ? ? ? ? ? ? ? ? sb.deleteCharAt(sb.length() - 1); ? ? ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? sb.append('3'); ? ? ? ? ? ? ? ? textView.setText(sb.toString()); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case R.id.button_4: ? ? ? ? ? ? ? ? if (isZero == true) { ? ? ? ? ? ? ? ? ? ? sb.deleteCharAt(sb.length() - 1); ? ? ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? sb.append('4'); ? ? ? ? ? ? ? ? textView.setText(sb.toString()); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case R.id.button_5: ? ? ? ? ? ? ? ? if (isZero == true) { ? ? ? ? ? ? ? ? ? ? sb.deleteCharAt(sb.length() - 1); ? ? ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? sb.append('5'); ? ? ? ? ? ? ? ? textView.setText(sb.toString()); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case R.id.button_6: ? ? ? ? ? ? ? ? if (isZero == true) { ? ? ? ? ? ? ? ? ? ? sb.deleteCharAt(sb.length() - 1); ? ? ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? sb.append('6'); ? ? ? ? ? ? ? ? textView.setText(sb.toString()); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case R.id.button_7: ? ? ? ? ? ? ? ? if (isZero == true) { ? ? ? ? ? ? ? ? ? ? sb.deleteCharAt(sb.length() - 1); ? ? ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? sb.append('7'); ? ? ? ? ? ? ? ? textView.setText(sb.toString()); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case R.id.button_8: ? ? ? ? ? ? ? ? if (isZero == true) { ? ? ? ? ? ? ? ? ? ? sb.deleteCharAt(sb.length() - 1); ? ? ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? sb.append('8'); ? ? ? ? ? ? ? ? textView.setText(sb.toString()); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case R.id.button_9: ? ? ? ? ? ? ? ? if (isZero == true) { ? ? ? ? ? ? ? ? ? ? sb.deleteCharAt(sb.length() - 1); ? ? ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? sb.append('9'); ? ? ? ? ? ? ? ? textView.setText(sb.toString()); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case R.id.button_0: ? ? ? ? ? ? ? ? if (isZero == false) { ? ? ? ? ? ? ? ? ? ? sb.append('0'); ? ? ? ? ? ? ? ? ? ? if (sb.length() == 1 || ? ? ? ? ? ? ? ? ? ? ? ? ? ? !('0' <= sb.charAt(sb.length() - 2) && sb.charAt(sb.length() - 2) <= '9') ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? && sb.charAt(sb.length() - 2) != '.') { ? ? ? ? ? ? ? ? ? ? ? ? isZero = true; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? textView.setText(sb.toString()); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case R.id.button_dot: ? ? ? ? ? ? ? ? if (isHasDot == false) { ? ? ? ? ? ? ? ? ? ? if (sb.length() == 0 || ? ? ? ? ? ? ? ? ? ? ? ? ? ? !('0' <= sb.charAt(sb.length() - 1) && sb.charAt(sb.length() - 1) <= '9')) { ? ? ? ? ? ? ? ? ? ? ? ? sb.append("0."); ? ? ? ? ? ? ? ? ? ? } else { ? ? ? ? ? ? ? ? ? ? ? ? sb.append('.'); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? isHasDot = true; ? ? ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? textView.setText(sb.toString()); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case R.id.button_add: ? ? ? ? ? ? ? ? if (sb.length() != 0 && ? ? ? ? ? ? ? ? ? ? ? ? (sb.charAt(sb.length() - 1) == '+' || sb.charAt(sb.length() - 1) == '-' || sb.charAt(sb.length() - 1) == '*' || sb.charAt(sb.length() - 1) == '/')) { ? ? ? ? ? ? ? ? ? ? sb.setCharAt(sb.length() - 1, '+'); ? ? ? ? ? ? ? ? } else if (sb.length() != 0) { ? ? ? ? ? ? ? ? ? ? sb.append('+'); ? ? ? ? ? ? ? ? ? ? zeroStack.push(isZero); ? ? ? ? ? ? ? ? ? ? dotStack.push(isHasDot); ? ? ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? ? ? isHasDot = false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if (result.matches("[-]?\\d+[.]?\\d*") && sb.length() == 0) { ? ? ? ? ? ? ? ? ? ? sb.append(result + "+"); ? ? ? ? ? ? ? ? ? ? isHasDot = result.matches("[-]?\\d*[.]\\d*"); ? ? ? ? ? ? ? ? ? ? isZero = "0".equals(result); ? ? ? ? ? ? ? ? ? ? zeroStack.push(isZero); ? ? ? ? ? ? ? ? ? ? dotStack.push(isHasDot); ? ? ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? ? ? isHasDot = false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? textView.setText(sb.toString()); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case R.id.button_minus: ? ? ? ? ? ? ? ? if (sb.length() != 0 && ? ? ? ? ? ? ? ? ? ? ? ? (sb.charAt(sb.length() - 1) == '+' || sb.charAt(sb.length() - 1) == '-' || sb.charAt(sb.length() - 1) == '*' || sb.charAt(sb.length() - 1) == '/')) { ? ? ? ? ? ? ? ? ? ? sb.append('('); ? ? ? ? ? ? ? ? ? ? zeroStack.push(isZero); ? ? ? ? ? ? ? ? ? ? dotStack.push(isHasDot); ? ? ? ? ? ? ? ? ? ? leftNum++; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if (result.matches("[-]?\\d+[.]?\\d*") && sb.length() == 0) { ? ? ? ? ? ? ? ? ? ? sb.append(result + "-"); ? ? ? ? ? ? ? ? ? ? isHasDot = result.matches("[-]?\\d*[.]\\d*"); ? ? ? ? ? ? ? ? ? ? isZero = "0".equals(result); ? ? ? ? ? ? ? ? ? ? zeroStack.push(isZero); ? ? ? ? ? ? ? ? ? ? dotStack.push(isHasDot); ? ? ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? ? ? isHasDot = false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? sb.append('-'); ? ? ? ? ? ? ? ? zeroStack.push(isZero); ? ? ? ? ? ? ? ? dotStack.push(isHasDot); ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? isHasDot = false; ? ? ? ? ? ? ? ? textView.setText(sb.toString()); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case R.id.button_mult: ? ? ? ? ? ? ? ? if (sb.length() != 0 && ? ? ? ? ? ? ? ? ? ? ? ? (sb.charAt(sb.length() - 1) == '+' || sb.charAt(sb.length() - 1) == '-' || sb.charAt(sb.length() - 1) == '*' || sb.charAt(sb.length() - 1) == '/')) { ? ? ? ? ? ? ? ? ? ? sb.setCharAt(sb.length() - 1, '*'); ? ? ? ? ? ? ? ? } else if (sb.length() != 0) { ? ? ? ? ? ? ? ? ? ? sb.append('*'); ? ? ? ? ? ? ? ? ? ? zeroStack.push(isZero); ? ? ? ? ? ? ? ? ? ? dotStack.push(isHasDot); ? ? ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? ? ? isHasDot = false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if (result.matches("[-]?\\d+[.]?\\d*") && sb.length() == 0) { ? ? ? ? ? ? ? ? ? ? sb.append(result + "*"); ? ? ? ? ? ? ? ? ? ? isHasDot = result.matches("[-]?\\d*[.]\\d*"); ? ? ? ? ? ? ? ? ? ? isZero = "0".equals(result); ? ? ? ? ? ? ? ? ? ? zeroStack.push(isZero); ? ? ? ? ? ? ? ? ? ? dotStack.push(isHasDot); ? ? ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? ? ? isHasDot = false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? textView.setText(sb.toString()); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case R.id.button_divide: ? ? ? ? ? ? ? ? if (sb.length() != 0 && ? ? ? ? ? ? ? ? ? ? ? ? (sb.charAt(sb.length() - 1) == '+' || sb.charAt(sb.length() - 1) == '-' || sb.charAt(sb.length() - 1) == '*' || sb.charAt(sb.length() - 1) == '/')) { ? ? ? ? ? ? ? ? ? ? sb.setCharAt(sb.length() - 1, '/'); ? ? ? ? ? ? ? ? } else if (sb.length() != 0) { ? ? ? ? ? ? ? ? ? ? sb.append('/'); ? ? ? ? ? ? ? ? ? ? zeroStack.push(isZero); ? ? ? ? ? ? ? ? ? ? dotStack.push(isHasDot); ? ? ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? ? ? isHasDot = false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if (result.matches("[-]?\\d+[.]?\\d*") && sb.length() == 0) { ? ? ? ? ? ? ? ? ? ? sb.append(result + "/"); ? ? ? ? ? ? ? ? ? ? isHasDot = result.matches("[-]?\\d*[.]\\d*"); ? ? ? ? ? ? ? ? ? ? isZero = "0".equals(result); ? ? ? ? ? ? ? ? ? ? zeroStack.push(isZero); ? ? ? ? ? ? ? ? ? ? dotStack.push(isHasDot); ? ? ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? ? ? isHasDot = false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? textView.setText(sb.toString()); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case R.id.button_left: ? ? ? ? ? ? ? ? sb.append('('); ? ? ? ? ? ? ? ? leftNum++; ? ? ? ? ? ? ? ? zeroStack.push(isZero); ? ? ? ? ? ? ? ? dotStack.push(isHasDot); ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? isHasDot = false; ? ? ? ? ? ? ? ? textView.setText(sb.toString()); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case R.id.button_right: ? ? ? ? ? ? ? ? sb.append(')'); ? ? ? ? ? ? ? ? rightNum++; ? ? ? ? ? ? ? ? zeroStack.push(isZero); ? ? ? ? ? ? ? ? dotStack.push(isHasDot); ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? isHasDot = false; ? ? ? ? ? ? ? ? textView.setText(sb.toString()); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case R.id.button_del: ? ? ? ? ? ? ? ? if (sb.length() != 0) { ? ? ? ? ? ? ? ? ? ? if (sb.charAt(sb.length() - 1) == '.') { ? ? ? ? ? ? ? ? ? ? ? ? isHasDot = false; ? ? ? ? ? ? ? ? ? ? ? ? if (sb.charAt(sb.length() - 2) == '0') { ? ? ? ? ? ? ? ? ? ? ? ? ? ? sb.deleteCharAt(sb.length() - 1); ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (sb.charAt(sb.length() - 1) == '(') { ? ? ? ? ? ? ? ? ? ? ? ? leftNum--; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (sb.charAt(sb.length() - 1) == ')') { ? ? ? ? ? ? ? ? ? ? ? ? rightNum--; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (sb.charAt(sb.length() - 1) == '0' && isZero == true) { ? ? ? ? ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (!(sb.charAt(sb.length() - 1) == '.' || '0' <= sb.charAt(sb.length() - 1) && sb.charAt(sb.length() - 1) <= '9')) { ? ? ? ? ? ? ? ? ? ? ? ? if (!dotStack.isEmpty()) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? isHasDot = dotStack.pop(); ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? if (!zeroStack.isEmpty()) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? isZero = zeroStack.pop(); ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? sb.deleteCharAt(sb.length() - 1); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? result_view.setText(""); ? ? ? ? ? ? ? ? textView.setText(sb.toString()); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case R.id.button_ac: ? ? ? ? ? ? ? ? if (sb.length() != 0) { ? ? ? ? ? ? ? ? ? ? sb.delete(0, sb.length()); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? isHasDot = false; ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? zeroStack.clear(); ? ? ? ? ? ? ? ? dotStack.clear(); ? ? ? ? ? ? ? ? expression = ""; ? ? ? ? ? ? ? ? result = ""; ? ? ? ? ? ? ? ? leftNum = 0; ? ? ? ? ? ? ? ? rightNum = 0; ? ? ? ? ? ? ? ? result_view.setText(""); ? ? ? ? ? ? ? ? textView.setText(""); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case R.id.button_result: ? ? ? ? ? ? ? ? if (sb.length() != 0) { ? ? ? ? ? ? ? ? ? ? textView.setText(sb.toString()); ? ? ? ? ? ? ? ? ? ? isHasDot = false; ? ? ? ? ? ? ? ? ? ? isZero = false; ? ? ? ? ? ? ? ? ? ? zeroStack.clear(); ? ? ? ? ? ? ? ? ? ? dotStack.clear(); ? ? ? ? ? ? ? ? ? ? if (leftNum < rightNum) { ? ? ? ? ? ? ? ? ? ? ? ? result = "出錯(cuò)"; ? ? ? ? ? ? ? ? ? ? ? ? sb.delete(0, sb.length()); ? ? ? ? ? ? ? ? ? ? ? ? result_view.setText(result); ? ? ? ? ? ? ? ? ? ? ? ? leftNum = 0; ? ? ? ? ? ? ? ? ? ? ? ? rightNum = 0; ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? } else if (leftNum > rightNum) { ? ? ? ? ? ? ? ? ? ? ? ? while (leftNum > rightNum) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? sb.append(')'); ? ? ? ? ? ? ? ? ? ? ? ? ? ? rightNum++; ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (sb.charAt(0) == '-') { ? ? ? ? ? ? ? ? ? ? ? ? sb.insert(0, '0'); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (sb.charAt(sb.length() - 1) == '+' || sb.charAt(sb.length() - 1) == '-') { ? ? ? ? ? ? ? ? ? ? ? ? sb.append('0'); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (sb.charAt(sb.length() - 1) == '*' || sb.charAt(sb.length() - 1) == '/') { ? ? ? ? ? ? ? ? ? ? ? ? sb.append('1'); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? for (int i = 1; i < sb.length() - 1; i++) { ? ? ? ? ? ? ? ? ? ? ? ? char ch = sb.charAt(i); ? ? ? ? ? ? ? ? ? ? ? ? if (ch == '(' && (sb.charAt(i - 1) == '.' || '0' <= sb.charAt(i - 1) && sb.charAt(i - 1) <= '9')) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? sb.insert(i, '*'); ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? if (ch == ')' && '0' <= sb.charAt(i + 1) && sb.charAt(i + 1) <= '9') { ? ? ? ? ? ? ? ? ? ? ? ? ? ? sb.insert(i + 1, '*'); ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? expression = sb.toString(); ? ? ? ? ? ? ? ? ? ? sb.delete(0, sb.length()); ? ? ? ? ? ? ? ? ? ? exchange(expression); ? ? ? ? ? ? ? ? ? ? expression = ""; ? ? ? ? ? ? ? ? ? ? leftNum = 0; ? ? ? ? ? ? ? ? ? ? rightNum = 0; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? result_view.setText(result); ? ? ? ? ? ? ? ? break; ? ? ? ? } ? ? } ? ? public void exchange(String expression) { ? ? ? ? Queue<Object> queue = new LinkedList<>(); ? ? ? ? Stack<Character> stack = new Stack<>(); ? ? ? ? int figureNum = 0; ? ? ? ? int operatorNum = 0; ? ? ? ? StringBuilder numSb = new StringBuilder(); ? ? ? ? for (int i = 0; i < expression.length(); i++) { ? ? ? ? ? ? char ch = expression.charAt(i); ? ? ? ? ? ? if (ch == '.' || ('0' <= ch && ch <= '9')) { ? ? ? ? ? ? ? ? numSb.append(ch); ? ? ? ? ? ? } else { ? ? ? ? ? ? ? ? if (numSb.length() != 0) { ? ? ? ? ? ? ? ? ? ? queue.offer(new BigDecimal(numSb.toString())); ? ? ? ? ? ? ? ? ? ? figureNum++; ? ? ? ? ? ? ? ? ? ? numSb.delete(0, numSb.length()); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if (ch == '-' && expression.charAt(i - 1) == '(' && ? ? ? ? ? ? ? ? ? ? ? ? ('0' <= expression.charAt(i + 1) && expression.charAt(i + 1) <= '9')) { ? ? ? ? ? ? ? ? ? ? numSb.append(ch); ? ? ? ? ? ? ? ? ? ? continue; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if (ch == '(') { ? ? ? ? ? ? ? ? ? ? stack.push(ch); ? ? ? ? ? ? ? ? } else if ((ch == '+' || ch == '-') && !stack.isEmpty() && stack.peek() == '(') { ? ? ? ? ? ? ? ? ? ? stack.push(ch); ? ? ? ? ? ? ? ? } else if ((ch == '*' || ch == '/') && !stack.isEmpty() && !(stack.peek() == '*' || stack.peek() == '/')) { ? ? ? ? ? ? ? ? ? ? stack.push(ch); ? ? ? ? ? ? ? ? } else { ? ? ? ? ? ? ? ? ? ? while (!stack.empty() && stack.peek() != '(') { ? ? ? ? ? ? ? ? ? ? ? ? queue.offer(stack.pop()); ? ? ? ? ? ? ? ? ? ? ? ? operatorNum++; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (!stack.isEmpty()) { ? ? ? ? ? ? ? ? ? ? ? ? stack.pop(); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (ch != ')') { ? ? ? ? ? ? ? ? ? ? ? ? stack.push(ch); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? if (numSb.length() != 0) { ? ? ? ? ? ? queue.offer(new BigDecimal(numSb.toString())); ? ? ? ? ? ? figureNum++; ? ? ? ? } ? ? ? ? while (!stack.empty()) { ? ? ? ? ? ? queue.offer(stack.pop()); ? ? ? ? ? ? operatorNum++; ? ? ? ? } ? ? ? ? if (figureNum == operatorNum + 1) { ? ? ? ? ? ? calculate(queue); ? ? ? ? } else { ? ? ? ? ? ? result = "出錯(cuò)"; ? ? ? ? } ? ? } ? ? public void calculate(Queue<Object> queue) { ? ? ? ? Stack<BigDecimal> stack = new Stack<>(); ? ? ? ? while (!queue.isEmpty()) { ? ? ? ? ? ? Object obj = queue.poll(); ? ? ? ? ? ? if (obj.getClass() == Character.class) { ? ? ? ? ? ? ? ? char operator = (Character) obj; ? ? ? ? ? ? ? ? BigDecimal num1 = (BigDecimal) stack.pop(); ? ? ? ? ? ? ? ? BigDecimal num2 = (BigDecimal) stack.pop(); ? ? ? ? ? ? ? ? BigDecimal subResult; ? ? ? ? ? ? ? ? if (operator == '+') { ? ? ? ? ? ? ? ? ? ? subResult = num2.add(num1); ? ? ? ? ? ? ? ? ? ? stack.push(subResult); ? ? ? ? ? ? ? ? } else if (operator == '-') { ? ? ? ? ? ? ? ? ? ? subResult = num2.subtract(num1); ? ? ? ? ? ? ? ? ? ? stack.push(subResult); ? ? ? ? ? ? ? ? } else if (operator == '*') { ? ? ? ? ? ? ? ? ? ? subResult = num2.multiply(num1); ? ? ? ? ? ? ? ? ? ? stack.push(subResult); ? ? ? ? ? ? ? ? } else { ? ? ? ? ? ? ? ? ? ? if ("0".equals(num1.toString())) { ? ? ? ? ? ? ? ? ? ? ? ? result = "不能除以零"; ? ? ? ? ? ? ? ? ? ? ? ? return; ? ? ? ? ? ? ? ? ? ? } else if ("0".equals(num2.toString())) { ? ? ? ? ? ? ? ? ? ? ? ? stack.push(new BigDecimal("0")); ? ? ? ? ? ? ? ? ? ? } else { ? ? ? ? ? ? ? ? ? ? ? ? subResult = num2.divide(num1, 20, BigDecimal.ROUND_HALF_UP); ? ? ? ? ? ? ? ? ? ? ? ? stack.push(subResult); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } else { ? ? ? ? ? ? ? ? stack.push((BigDecimal) obj); ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? result = stack.pop().toString(); ? ? ? ? if (result.matches("[-]?\\d*[.]\\d*")) { ? ? ? ? ? ? int i = result.length() - 1; ? ? ? ? ? ? while (result.charAt(i) == '0') { ? ? ? ? ? ? ? ? i--; ? ? ? ? ? ? } ? ? ? ? ? ? if (result.charAt(i) == '.') { ? ? ? ? ? ? ? ? i--; ? ? ? ? ? ? } ? ? ? ? ? ? result = result.substring(0, i + 1); ? ? ? ? } ? ? } }
- 分析
1、expression,result,textview等會(huì)多次使用,因此將其設(shè)置為成員變量。
2、顯示框根據(jù)行數(shù)自動(dòng)放大或縮小。使用textView.setAutoSizeTextTypeUniformWithConfiguration(4, 70, 10, TypedValue.COMPLEX_UNIT_DIP);方法控制。第一個(gè)參數(shù)表示最小大小,第二個(gè)參數(shù)表示最大大小,第三個(gè)參數(shù)表示每次縮小步長(zhǎng),第四個(gè)參數(shù)表示之前參數(shù)的單位(如:dp,sp等)。
- 按鈕點(diǎn)擊詳解
3、除了按下等號(hào)鍵顯示計(jì)算結(jié)果,其余按鍵都不需要顯示,因此將結(jié)果顯示框設(shè)為空。
4、輸入數(shù)字時(shí),如果前一個(gè)是數(shù)字“0”,按下其他數(shù)字應(yīng)顯示該數(shù)字,即顯示“1”而不是“01”。
5、按下加減運(yùn)算符時(shí),如果之前有計(jì)算結(jié)果,應(yīng)直接使用該結(jié)果運(yùn)算。
6、表達(dá)式優(yōu)化:以“-”號(hào)開(kāi)頭的表達(dá)式,可以在前加上零方便計(jì)算;如果左括號(hào)少于右括號(hào),此表達(dá)式無(wú)法計(jì)算;左括號(hào)少于右括號(hào),可以在末尾補(bǔ)全右括號(hào);表達(dá)式以“+”“-”號(hào)結(jié)尾,應(yīng)補(bǔ)上0,以“*”“/”結(jié)尾,應(yīng)補(bǔ)上1;對(duì)于a(b),(a)b應(yīng)自動(dòng)補(bǔ)上乘號(hào)
- 中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式
1、遇到數(shù)字以及小數(shù)點(diǎn)直接保存,遇到符號(hào)按照優(yōu)先級(jí)順序出棧入棧。
2、使用計(jì)數(shù)器分別記錄運(yùn)算符和數(shù)字的個(gè)數(shù),如果不匹配,直接顯示出錯(cuò)
- 計(jì)算
1、在除法運(yùn)算中,“0/a”應(yīng)直接顯示0、“a/0”應(yīng)不計(jì)算,直接顯示不能除以零
2、在最后結(jié)果上,“2.000000…”的類(lèi)似有末尾0的結(jié)果應(yīng)去除末尾0以及小數(shù)點(diǎn)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android開(kāi)發(fā)實(shí)現(xiàn)的簡(jiǎn)單計(jì)算器功能【附完整demo源碼下載】
- android計(jì)算器簡(jiǎn)單實(shí)現(xiàn)代碼
- 簡(jiǎn)單實(shí)現(xiàn)Android計(jì)算器功能
- Android實(shí)戰(zhàn)教程第一篇之最簡(jiǎn)單的計(jì)算器
- Android計(jì)算器簡(jiǎn)單邏輯實(shí)現(xiàn)實(shí)例分享
- Android開(kāi)發(fā)學(xué)習(xí)實(shí)現(xiàn)簡(jiǎn)單計(jì)算器
- Android開(kāi)發(fā)實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能
- Android實(shí)現(xiàn)簡(jiǎn)單加法計(jì)算器
- Android實(shí)現(xiàn)簡(jiǎn)單計(jì)算器
- Android實(shí)戰(zhàn)項(xiàng)目之實(shí)現(xiàn)一個(gè)簡(jiǎn)單計(jì)算器
相關(guān)文章
Android?Jetpack組件Lifecycle源碼解析
這篇文章主要為大家介紹了Android?Jetpack組件Lifecycle源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03android監(jiān)聽(tīng)View加載完成的示例講解
今天小編就為大家分享一篇android監(jiān)聽(tīng)View加載完成的示例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09Android使用CrashHandler來(lái)獲取應(yīng)用的crash信息的方法
本篇文章主要介紹了Android使用CrashHandler來(lái)獲取應(yīng)用的crash信息的方法,具有一定的參考價(jià)值,有興趣的可以了解一下2017-09-09Android實(shí)現(xiàn)三段式滑動(dòng)效果
最近發(fā)現(xiàn)很多app都使用了三段式滑動(dòng),比如說(shuō)高德的首頁(yè)和某寶等物流信息都是使用的三段式滑動(dòng)方式,谷歌其實(shí)給了我們很好的2段式滑動(dòng),就是BottomSheet,所以這次我也是在這個(gè)原理基礎(chǔ)上做了一個(gè)小小的修改來(lái)實(shí)現(xiàn)我們今天想要的效果。2021-06-06Android實(shí)現(xiàn)底部狀態(tài)欄切換的兩種方式
這篇文章主要介紹了Android實(shí)現(xiàn)底部狀態(tài)欄切換功能,在文中給大家提到了兩種實(shí)現(xiàn)方式,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06Android實(shí)現(xiàn)系統(tǒng)打印功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)系統(tǒng)打印功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12使用PHP開(kāi)發(fā)Android應(yīng)用程序技術(shù)介紹
這篇文章主要介紹了使用PHP開(kāi)發(fā)Android應(yīng)用程序技術(shù)介紹,本文講解了安裝PHP for Android、設(shè)置PHP for Android開(kāi)發(fā)環(huán)境、使用PHP構(gòu)建Android應(yīng)用程序,需要的朋友可以參考下2015-03-03