↑大致效果

项目构成:

随便写的,用的线性布局

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="top|center"
android:orientation="vertical"
android:padding="5dp">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:showDividers="middle"> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"> <TextView
android:layout_marginBottom="20dp"
android:id="@+id/tv_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right|bottom"
android:lines="3"
android:maxLines="3"
android:scrollbars="vertical"
android:textColor="#000000"
android:textSize="38dp" />
</LinearLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:showDividers="middle"> <LinearLayout
android:layout_width="match_parent"
android:layout_height="75dp"
android:orientation="horizontal"
android:showDividers="middle"> <Button
android:id="@+id/btn_cancel"
style="@style/btn_cal"
android:text="CE" /> <Button
android:id="@+id/btn_clear"
style="@style/btn_cal"
android:text="C" /> <Button
android:id="@+id/btn_sqrt"
style="@style/btn_cal"
android:text="√" /> <Button
android:id="@+id/btn_plus"
style="@style/btn_cal"
android:text="+" />
</LinearLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="75dp"
android:orientation="horizontal"
android:showDividers="middle"> <Button
android:id="@+id/btn_seven"
style="@style/btn_cal"
android:text="7" /> <Button
android:id="@+id/btn_eight"
style="@style/btn_cal"
android:text="8" /> <Button
android:id="@+id/btn_nine"
style="@style/btn_cal"
android:text="9" /> <Button
android:id="@+id/btn_minus"
style="@style/btn_cal"
android:text="-" /> </LinearLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="75dp"
android:orientation="horizontal"
android:showDividers="middle"> <Button
android:id="@+id/btn_four"
style="@style/btn_cal"
android:text="4" /> <Button
android:id="@+id/btn_five"
style="@style/btn_cal"
android:text="5" /> <Button
android:id="@+id/btn_six"
style="@style/btn_cal"
android:text="6" /> <Button
android:id="@+id/btn_multiply"
style="@style/btn_cal"
android:text="×" />
</LinearLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="75dp"
android:orientation="horizontal"
android:showDividers="middle"> <Button
android:id="@+id/btn_one"
style="@style/btn_cal"
android:text="1" /> <Button
android:id="@+id/btn_two"
style="@style/btn_cal"
android:text="2" /> <Button
android:id="@+id/btn_three"
style="@style/btn_cal"
android:text="3" /> <Button
android:id="@+id/btn_divide"
style="@style/btn_cal"
android:text="÷" />
</LinearLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="75dp"
android:orientation="horizontal"
android:showDividers="middle"> <Button
android:id="@+id/btn_zero"
style="@style/btn_cal"
android:layout_weight="2"
android:text="0" /> <Button
android:id="@+id/btn_dot"
style="@style/btn_cal"
android:text="." /> <Button
android:id="@+id/btn_equal"
style="@style/btn_cal"
android:text="=" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
</android.support.constraint.ConstraintLayout>

Main_activiity类:

  package com.example.myapplication6;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; public class MainActivity extends AppCompatActivity {
double sum = 0.0;
double temp = 0.0;
int op = -1;
double step = 1;
boolean positive = true;
boolean flag = true;
TextView tv = null;
Button sqrt = null;
Button C = null;
Button CE = null;
Button dot = null;
Button num1 = null;
Button num2 = null;
Button num3 = null;
Button num4 = null;
Button num5 = null;
Button num6 = null;
Button num7 = null;
Button num8 = null;
Button num9 = null;
Button num0 = null;
Button plus = null;
Button subtract = null;
Button multiply = null;
Button divide = null;
Button equal = null;
NumUtil numUtil = new NumUtil();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView tv=(TextView) findViewById(R.id.tv_result);
num0 = (Button) findViewById(R.id.btn_zero);
num0.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(temp < 0.00000001 && temp > 0.0)
tv.setText("0");
else{
if(flag){
temp *= 10;
}else {
step /= 10;
}
tv.setText(numUtil._tv(temp));
}
}
});
num1 = (Button) findViewById(R.id.btn_one);
num1.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(flag){
temp *= 10;
temp += 1;
}else {
step /= 10;
temp += step * 1.0;
}
tv.setText(numUtil._tv(temp));
}
});
num2 = (Button) findViewById(R.id.btn_two);
num2.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(flag){
temp *= 10;
temp += 2;
}else {
step /= 10;
temp += step * 2;
}
tv.setText(numUtil._tv(temp));
}
});
num3 = (Button) findViewById(R.id.btn_three);
num3.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(flag){
temp *= 10;
temp += 3;
}else {
step /= 10;
temp += step * 3;
}
tv.setText(numUtil._tv(temp));
}
});
num4 = (Button) findViewById(R.id.btn_four);
num4.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(flag){
temp *= 10;
temp += 4;
}else {
step /= 10;
temp += step * 4;
}
tv.setText(numUtil._tv(temp));
}
});
num5 = (Button) findViewById(R.id.btn_five);
num5.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(flag){
temp *= 10;
temp += 5;
}else {
step /= 10;
temp += step * 5;
}
tv.setText(numUtil._tv(temp));
}
});
num6 = (Button) findViewById(R.id.btn_six);
num6.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(flag){
temp *= 10;
temp += 6;
}else {
step /= 10;
temp += step * 6;
}
tv.setText(numUtil._tv(temp));
}
});
num7 = (Button) findViewById(R.id.btn_seven);
num7.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(flag){
temp *= 10;
temp += 7;
}else {
step /= 10;
temp += step * 7;
}
tv.setText(numUtil._tv(temp));
}
});
num8 = (Button) findViewById(R.id.btn_eight);
num8.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(flag){
temp *= 10;
temp += 8;
}else {
step /= 10;
temp += step * 8;
}
tv.setText(numUtil._tv(temp));
}
});
num9 = (Button) findViewById(R.id.btn_nine);
num9.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(flag){
temp *= 10;
temp += 9;
}else {
step /= 10;
temp += step * 9;
}
tv.setText(numUtil._tv(temp));
}
});
dot = (Button) findViewById(R.id.btn_dot);
dot.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(flag){
flag = false;
tv.setText(numUtil._tv(temp)+".");
}
}
});
equal = (Button) findViewById(R.id.btn_equal);
equal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(op == -1){
sum = temp;
}else if(op == 1){
sum += temp;
}else if(op == 2){
sum -= temp;
}else if(op == 3){
sum *= temp;
}else if(op == 4){
sum /= temp;
}
tv.setText(numUtil._tv(sum));
positive = true;
flag = true;
sum = 0.0;
temp = 0.0;
step = 1.0;
op = -1;
}
});
plus = (Button) findViewById(R.id.btn_plus);
plus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
tv.setText("+");
if(op == -1){
sum = temp;
temp = 0.0;
}else{
if(op == 1){
sum += temp;
}else if(op == 2){
sum -= temp;
}else if(op == 3){
sum *= temp;
}else if(op == 4){
sum /= temp;
}
}
op = 1;
temp = 0.0;
positive = true;
flag = true;
}
});
subtract = (Button) findViewById(R.id.btn_minus);
subtract.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
tv.setText("-");
if(op == -1){
sum = temp;
temp = 0.0;
}else{
if(op == 1){
sum += temp;
}else if(op == 2){
sum -= temp;
}else if(op == 3){
sum *= temp;
}else if(op == 4){
sum /= temp;
}
}
op = 2;
temp = 0.0;
positive = true;
flag = true;
}
});
multiply = (Button) findViewById(R.id.btn_multiply);
multiply.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
tv.setText("×");
if(op == -1){
sum = temp;
temp = 0.0;
}else{
if(op == 1){
sum += temp;
}else if(op == 2){
sum -= temp;
}else if(op == 3){
sum *= temp;
}else if(op == 4){
sum /= temp;
}
}
op = 3;
temp = 0.0;
positive = true;
flag = true;
}
});
divide = (Button) findViewById(R.id.btn_divide);
divide.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
tv.setText("÷");
if(op == -1){
sum = temp;
temp = 0.0;
}else{
if(op == 1){
sum += temp;
}else if(op == 2){
sum -= temp;
}else if(op == 3){
sum *= temp;
}else if(op == 4){
sum /= temp;
}
}
op = 4;
temp = 0.0;
positive = true;
flag = true;
}
});
C = (Button) findViewById(R.id.btn_cancel);
C.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
tv.setText(" ");
positive = true;
flag = true;
temp = 0.0;
}
});
CE = (Button) findViewById(R.id.btn_clear);
CE.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
tv.setText(" ");
positive = true;
flag = true;
sum = 0.0;
temp = 0.0;
step = 1.0;
op = -1;
}
});
sqrt = (Button) findViewById(R.id.btn_sqrt);
sqrt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(op == -1){
sum = temp;
}else if(op == 1){
sum += temp;
}else if(op == 2){
sum -= temp;
}else if(op == 3){
sum *= temp;
}else if(op == 4){
sum /= temp;
}
sum = Math.sqrt(sum);
tv.setText(numUtil._tv(sum));
positive = true;
flag = true;
sum = 0.0;
temp = 0.0;
step = 1.0;
op = -1;
}
});
} }

NumUtil工具类:

package com.example.myapplication6;

public class NumUtil {
public double toDouble(String str){
return 0.0;
}
public String _tv(double x){
double t = x - (int) x;
if(t < 0)
t = -t;
if(t < 0.00000001)
return String.valueOf((int)x);
else{
String temp = String.format("%.7f", x);
for(int i = temp.length() -1; i >= 0; i--){
if(temp.substring(i,i+1).equals("0")){
continue;
}else{
if(i + 1 < temp.length()){
temp = temp.substring(0,i+1);
}
break;
}
}
return temp;
} }
}

按钮的垃圾设定

<style name="btn_cal">
<item name="android:layout_marginLeft">3dp</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:background">#EEA9B8</item>
<item name="android:textSize">30px</item>
</style>

不太好弄的地方就是对于小数点后的处理了,剩下的随便写写就完事了

android 开发 简单的小计算器的更多相关文章

  1. Android开发效率的小技巧

    提高eclipse使用效率(二) 提高Android开发效率的小技巧   XML文件的代码提示 adt中也有xml文件的代码提示,为了让提示来的更加猛烈,我们还要设置一下 打开eclipse - Wi ...

  2. 几款Android开发人员必备小工具

    在这里我介绍一下我常常在Android Studio里面使用的小工具吧,这些工具都能够在plugin里面搜索到. (当然了哈.我也是从网上找的.用着挺方便的,在这里总结一下) Gsonformat: ...

  3. 我对android开发的一点小感悟小看法

    “Android”,“Android开发”等等这些词成了时下最热的词,也是时下大众最关注最吸引人眼球的话题,当然,最热门的行业也意味着高薪,好的就业环境,但同时也意味着强大的竞争力! Android系 ...

  4. 新人学习Android开发遇到的小问题总结

    1. IDE搭建: 搭建android的IDE时,先注意是什么版本的系统,64/32位系统. 通常使用的是Eclipse for android,Android Studio由于还需要FQ,网速慢,所 ...

  5. Android开发中的小技巧

    转自:http://blog.csdn.net/guxiao1201/article/details/40655661 简单介绍: startActivities (Intent[] intents) ...

  6. 提高eclipse使用效率(二) 提高Android开发效率的小技巧

    XML文件的代码提示 adt中也有xml文件的代码提示,为了让提示来的更加猛烈,我们还要设置一下 打开eclipse - Window - Preferences,在右边的目录树中切换到XML - X ...

  7. Android 开发中常用小技巧

    TextView中的getTextSize返回值是以像素(px)为单位的, 而setTextSize()是以sp为单位的. 所以如果直接用返回的值来设置会出错,解决办法是 用setTextSize() ...

  8. 提高eclipse使用效率(二)—— 提高Android开发效率的小技巧

    XML文件的代码提示 adt中也有xml文件的代码提示,为了让提示来的更加猛烈,我们还要设置一下 打开eclipse - Window - Preferences,在右边的目录树中切换到XML - X ...

  9. android 开发 简单的页面布局

    package com.example.test; import android.app.Activity; import android.os.Bundle; import android.view ...

随机推荐

  1. LUA table.sort的问题,数组与表的区别

    t = { [] = , [] = , [] = , [] = , } t1 = { , , , , } t2 = { 'a', 'b','d','c', } function cmp(v1, v2) ...

  2. 关于使用testng的retry问题

    总体是利用TestNG里面的IRetryAnalyzer.TestListenerAdapter接口来实现相关问题 1.定义一个自己的retryanalyzer import org.testng.I ...

  3. rundeck

    docker run -d -p 4440:4440 -e EXTERNAL_SERVER_URL=http://109.105.4.65:4440 -v/root/rundeck:/var/rund ...

  4. spring security+cas(cas proxy配置)

    什么时候会用到代理proxy模式? 举一个例子:有两个应用App1和App2,它们都是受Cas服务器保护的,即请求它们时都需要通过Cas 服务器的认证.现在需要在App1中通过Http请求访问App2 ...

  5. 2015年传智播客JavaEE 第168期就业班视频教程16-框架结构测试(加载全spring配置文件)+struts2属性驱动测试

    模块的规范化我们已经做完了,下面我们要做我们的功能了. 如果是模型驱动就是name="对应model的name" 如果用属性驱动的话,必须得把表现层(Action类)里面映射的用于 ...

  6. 基于 EntityFramework 的数据库主从读写分离服务插件

    基于 EntityFramework 的数据库主从读写分离服务插件 1. 版本信息和源码 1.1 版本信息 v1.01 beta(2015-04-07),基于 EF 6.1 开发,支持 EF 6.1 ...

  7. a标签href="javascript:;"

    //点击a链接,执行一段js代码 <!DOCTYPE html> <html> <head> <title></title> </he ...

  8. word生成包含echarts图形使用phantomjs,支持word2003,2007

    代码具体地址在我的github上 :https://github.com/HaoTwoDonkey/QuickOutPutWord 写得不好,欢迎提出问题 下面说几个phantomjs使用过程中遇到的 ...

  9. raw格式转换成qcow2格式

    qemu-img convert -f raw redhat6.7-kvm-postgresql9.2.3-8disk-pulsar2.2 -O qcow2 redhat6.7-kvm-postgre ...

  10. 续安装好composer和workerman之后;TP5运行workerman的操作

    TP5想要实现时时通讯:首先先安装好composer和workerman,我之前有写一篇安装的方法,在cmd里面安装:tp5手册上面有写cmd命令的代码:接下来是安装好后如何运行的: 首先在项目中建立 ...