s界面布局是用户界面结构的描述,定义界面中所有的元素、结构和相互关系,通过本次实验了解在 Android 界面开发过程中常见的界面布局的使用方法。

通过TableLayout布局实现计算器界面布局,并实现计算功能。

activity_main.xml

<?xml version="1.0"?>

<TableLayout android:stretchColumns="*"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <TableRow android:layout_marginTop="200dp" style="@style/rowStyle" android:id="@+id/tr_one">
        <TextView android:layout_height="match_parent"
            android:id="@+id/calc_out"
            android:layout_span="4"
            android:text="0"
            android:textSize="40dp"
            android:gravity="right">
        </TextView>
    </TableRow>

    <TableRow style="@style/rowStyle" android:id="@+id/ss">
        <Button style="@style/btnStyle" android:text="C" android:id="@+id/Clear"/>
        <Button style="@style/btnStyle" android:text="←" android:id="@+id/Goback"/>
        <Button style="@style/btnStyle" android:text="+" android:id="@+id/Plus"/>
        <Button style="@style/btnStyle" android:text="-" android:id="@+id/Reduce"/>
    </TableRow>
    <TableRow style="@style/rowStyle" android:id="@+id/tr_two">
        <Button style="@style/btnStyle" android:text="7" android:id="@+id/n7"/>
        <Button style="@style/btnStyle" android:text="8" android:id="@+id/n8"/>
        <Button style="@style/btnStyle" android:text="9" android:id="@+id/n9"/>
        <Button style="@style/btnStyle" android:text="x" android:id="@+id/Ride"/>
    </TableRow>

    <TableRow style="@style/rowStyle" android:id="@+id/tr_three">
        <Button style="@style/btnStyle" android:text="6" android:id="@+id/n6"/>
        <Button style="@style/btnStyle" android:text="5" android:id="@+id/n5"/>
        <Button style="@style/btnStyle" android:text="4" android:id="@+id/n4"/>
        <Button style="@style/btnStyle" android:text="/" android:id="@+id/Divide"/>
    </TableRow>

    <TableRow style="@style/rowStyle" android:id="@+id/tr_four">
        <Button style="@style/btnStyle" android:text="1" android:id="@+id/n1"/>
        <Button style="@style/btnStyle" android:text="2" android:id="@+id/n2"/>
        <Button style="@style/btnStyle" android:text="3" android:id="@+id/n3"/>
        <Button style="@style/btnStyle" android:text="." android:id="@+id/Dot"/>
    </TableRow>

    <TableRow style="@style/rowStyle" android:id="@+id/tr_five">
        <Button style="@style/btnStyle" android:text="0" android:layout_span="2" android:id="@+id/n0"/>
        <Button style="@style/btnStyle" android:text="=" android:layout_span="2" android:id="@+id/Equal"/>
    </TableRow>
</TableLayout>

styles.xml

<?xml version="1.0"?>

<resources>

    <!-- Base application theme. -->
    -<style parent="Theme.AppCompat.Light.DarkActionBar" name="AppTheme">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
    -<style name="rowStyle">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_weight">1</item>
</style>
    -<style name="btnStyle">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">match_parent</item>
    <item name="android:textSize">20sp</item>
</style>
</resources>

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="purple_200">#FFBB86FC</color>
    <color name="purple_500">#FF6200EE</color>
    <color name="purple_700">#FF3700B3</color>
    <color name="teal_200">#FF03DAC5</color>
    <color name="teal_700">#FF018786</color>
    <color name="black">#FF000000</color>
    <color name="white">#FFFFFFFF</color>

    <color name="colorPrimary">#008577</color>
    <color name="colorPrimaryDark">#00574B</color>
    <color name="colorAccent">#D81B60</color>
</resources>

night\themes.xml

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Theme.CALCActivity" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/purple_200</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="colorOnPrimary">@color/black</item>
        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_200</item>
        <item name="colorOnSecondary">@color/black</item>
        <!-- Status bar color. -->
        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
        <!-- Customize your theme here. -->
    </style>
</resources>

strings.xml

<resources>
    <string name="app_name">CALCActivity</string>
</resources>

values\themes.xml

 

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Theme.CALCActivity" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/purple_500</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="colorOnPrimary">@color/white</item>
        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>
        <item name="colorOnSecondary">@color/black</item>
        <!-- Status bar color. -->
        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
        <!-- Customize your theme here. -->
    </style>
</resources>

MainActivity.xml

package com.example.calcactivity;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import org.w3c.dom.Text;

public class MainActivity extends AppCompatActivity {

    Double results=0.0;
    String s="";
    String experssion="+*/-.";
    String experssion2="[+*/-]";
    //String[] strarray=s.split("[+*/-]");
//      Double d=Double.parseDouble(s);
//        String s2=d+"";
//    float[] nums={};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button num0=(Button) findViewById(R.id.n0);
        Button num1=(Button) findViewById(R.id.n1);
        Button num2=(Button) findViewById(R.id.n2);
        Button num3=(Button) findViewById(R.id.n3);
        Button num4=(Button) findViewById(R.id.n4);
        Button num5=(Button) findViewById(R.id.n5);
        Button num6=(Button) findViewById(R.id.n6);
        Button num7=(Button) findViewById(R.id.n7);
        Button num8=(Button) findViewById(R.id.n8);
        Button num9=(Button) findViewById(R.id.n9);


        Button clear=(Button) findViewById(R.id.Clear);//清空
        Button goback=(Button) findViewById(R.id.Goback);//返回
        Button plus=(Button) findViewById(R.id.Plus);//加
        Button reduce=(Button) findViewById(R.id.Reduce);//减
        Button ride=(Button) findViewById(R.id.Ride);//乘
        Button divide=(Button) findViewById(R.id.Divide);//除
        Button dot=(Button) findViewById(R.id.Dot);//点
        Button equal=(Button) findViewById(R.id.Equal);//等于

        TextView te=(TextView) findViewById(R.id.calc_out);//显示
//        te.setText(s);
        //定义1-9按钮的事件
        num0.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(s.length()>0) {
                    if (!experssion.contains(s.substring(s.length() - 1))) {
                        s += "0";
                        te.setText(s);
                    }
                }
            }
        });
        num1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                s += "1";
                te.setText(s);
            }
        });
        num2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                s += "2";
                te.setText(s);
            }
        });
        num3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                s += "3";
                te.setText(s);
            }
        });
        num4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                s += "4";
                te.setText(s);
            }
        });
        num5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                s += "5";
                te.setText(s);
            }
        });
        num6.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                s += "6";
                te.setText(s);
            }
        });
        num7.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                s += "7";
                te.setText(s);
            }
        });
        num8.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                s += "8";
                te.setText(s);
            }
        });
        num9.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                s += "9";
                te.setText(s);
            }
        });
//定义符号类按钮的事件
        //清空
        clear.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                s = "";
                te.setText(s);
            }
        });
        goback.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (s.length()>0) {
                    s = s.substring(0, s.length() - 1);
                }

                te.setText(s);
            }
        });
        plus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(!experssion.contains(s.substring(s.length()-1))) {
                    s += "+";
                }else{
                    s=s.substring(0,s.length()-1)+"+";
                }

                te.setText(s);
            }
        });
        reduce.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(!experssion.contains(s.substring(s.length()-1))) {
                    s += "-";
                }else{
                    s=s.substring(0,s.length()-1)+"-";
                }

                te.setText(s);
            }
        });
        ride.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(!experssion.contains(s.substring(s.length()-1))) {
                    s += "*";
                }else{
                    s=s.substring(0,s.length()-1)+"*";
                }

                te.setText(s);
            }
        });
        divide.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(!experssion.contains(s.substring(s.length()-1))) {
                    s += "/";
                }else{
                    s=s.substring(0,s.length()-1)+"/";
                }

                te.setText(s);
            }
        });
        dot.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(!experssion.contains(s.substring(s.length()-1))) {
                    s += ".";
                }else{
                    s=s.substring(0,s.length()-1)+".";
                }

                te.setText(s);
            }
        });
        equal.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(experssion.contains(s.substring(s.length()-1))) {
                    s = s.substring(0, s.length() - 1);
                }
                String[] sarray=s.split(experssion2);
                String p="hello";
                String[] experssionarray=new String[sarray.length-1];
                int j=0;
                for(int i=0;i<=s.length()-2;i++){
                    if(experssion2.contains(s.substring(i,i+1))) {
                        experssionarray[j]=s.substring(i,i+1);
                        j+=1;
                    }
                }
                for(int i=0;i<=sarray.length-1;i+=1){
                    if(i<1){
                        results=Double.parseDouble(sarray[0]);
                    }
                    else{
                        switch(experssionarray[i-1]){
                            case "+":
                                results+=Double.parseDouble(sarray[i]);
                                break;
                            case "-":
                                results-=Double.parseDouble(sarray[i]);
                                break;
                            case "*":
                                results*=Double.parseDouble(sarray[i]);
                                break;
                            case "/":
                                results/=Double.parseDouble(sarray[i]);
                                break;

                        }
                    }
                }
                String k=Double.toString(results);
                String end=s+"="+k;
                te.setText(end);
                s=k;
            }
        });
    }
}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐