欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android簡(jiǎn)單實(shí)現(xiàn)計(jì)算器功能

 更新時(shí)間:2022年08月11日 12:19:43   作者:初相味  
這篇文章主要為大家詳細(xì)介紹了Android簡(jiǎn)單實(shí)現(xiàn)計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android?Jetpack組件Lifecycle源碼解析

    Android?Jetpack組件Lifecycle源碼解析

    這篇文章主要為大家介紹了Android?Jetpack組件Lifecycle源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Android最新?tīng)顟B(tài)欄處理介紹

    Android最新?tīng)顟B(tài)欄處理介紹

    大家好,本篇文章主要講的是Android最新?tīng)顟B(tài)欄處理介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • android監(jiān)聽(tīng)View加載完成的示例講解

    android監(jiān)聽(tīng)View加載完成的示例講解

    今天小編就為大家分享一篇android監(jiān)聽(tīng)View加載完成的示例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • Android使用CrashHandler來(lái)獲取應(yīng)用的crash信息的方法

    Android使用CrashHandler來(lái)獲取應(yīng)用的crash信息的方法

    本篇文章主要介紹了Android使用CrashHandler來(lái)獲取應(yīng)用的crash信息的方法,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-09-09
  • Android實(shí)現(xiàn)三段式滑動(dòng)效果

    Android實(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-06
  • Android實(shí)現(xiàn)底部狀態(tài)欄切換的兩種方式

    Android實(shí)現(xiàn)底部狀態(tài)欄切換的兩種方式

    這篇文章主要介紹了Android實(shí)現(xiàn)底部狀態(tài)欄切換功能,在文中給大家提到了兩種實(shí)現(xiàn)方式,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • Android實(shí)現(xiàn)系統(tǒng)打印功能

    Android實(shí)現(xiàn)系統(tǒng)打印功能

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)系統(tǒng)打印功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 基于Android"今日事今日畢"的使用介紹

    基于Android"今日事今日畢"的使用介紹

    本篇文章是對(duì)Android"今日事今日畢"的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 使用PHP開(kāi)發(fā)Android應(yīng)用程序技術(shù)介紹

    使用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
  • Flutter渲染原理深入解析

    Flutter渲染原理深入解析

    眾所周知?Flutter是由Google推出的開(kāi)源的高性能跨平臺(tái)框架,一個(gè)2D渲染引擎。在Flutter中,Widget是Flutter用戶界面的基本構(gòu)成單元,可以說(shuō)一切皆Widget。下面來(lái)看下Flutter框架的整體結(jié)構(gòu)組成
    2023-04-04

最新評(píng)論