Android基础知识(简单实例计算器)
2016-07-23 23:48
507 查看
Android基础知识(简单实例计算器)
在做这个计算器的时候,我认为主要分为两部分:界面设计,功能实现。(效果图)
界面设计:
其实界面设计和功能实现是相互联系在一起的,我界面怎么去设计,功能就要去怎么实现。1、控件:界面有19个按钮,数字1-9和小数点、加减乘除、清空回退、百分比、等号,还有一个显示内容的文本框。实现起来十分简单只要拖动到xml中即可。
2、布局设计:刚拖进来的控件都摆放得比较凌乱,需要对其调整,本案例中,我会使用LinearLayout对界面进行布局。
3、样式:有背景颜色、边框线颜色、圆角。
接下来先看样式文件:
简单说明一下:
gradient -- 对应颜色渐变。 startcolor、endcolor就不多说了。android:angle 是指从哪个角度开始变。
solid -- 填充。
stroke -- 描边。
corners -- 圆角。
padding -- 定义内容离边界的距离。 与android:padding_left、android:padding_right这些是一个道理。
先介绍white_bg.xml,也就是显示内容的文本框的样式文件:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <!--圆角--> <corners android:radius="5dp" /> <!--边框线--> <stroke android:width="1dp" android:color="#000" /> <!--填充--> <solid android:color="#FFF" /> </shape>
接下来介绍白色键的样式文件white_selector.xml:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <pre name="code" class="html"> <item android:drawable="@drawable/white_bg" /> <item android:drawable="@drawable/gray_bg" android:state_pressed="true" /> </selector>
第一个item是调用上一个样式white_bg.xm为默认情况下的样式第二个item是调用了gray_bg.xml样式文件,根据其android:state_pressed="true"属性,意为点击时的样式。
<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="5dp" /> <solid android:color="#ccc" /> </shape>
接下来介绍白色键的样式文件orange_selector.xml:
<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/ashen" android:state_pressed="true" /> <item android:drawable="@drawable/orange_bg" /> </selector>
第一个item是调用了ashen.xml样式文件,根据其android:state_pressed="true"属性,意为点击时的样式。
<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="5dp" /> <solid android:color="#F5F5F5" /> </shape>
第二个item是调用样式orange_bg.xm为默认情况下的样式:
<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="5dp" /> <solid android:color="#FF6100" /> </shape>
在activity_main.xml的空间中分别去调用 white_bg、white_selector、orange_selector
功能实现:
在实现功能前,先要分清楚他们之间的关系:1、数字0-9和小数点
2、加减乘除
3、清除与回删键
4、等号
5、百分比
public class MainActivity extends Activity implements View.OnClickListener { Button btn_0, btn_1, btn_2, btn_3, btn_4, btn_5, btn_6, btn_7, btn_8, btn_9; //数字0-9 Button btn_dian; //小数点 Button btn_C, btn_del; //清除和回删 Button btn_yu; //求余 Button btn_chu; //除法 Button btn_cheng; //乘法 Button btn_jia; //加法 Button btn_jian; //减法 Button btn_deng; //等于 EditText input;//显示内容文本框 boolean clear_ed; //是否情况文本框 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_C = (Button) findViewById(R.id.btn_C); btn_del = (Button) findViewById(R.id.btn_del); btn_yu = (Button) findViewById(R.id.btn_yu); btn_chu = (Button) findViewById(R.id.btn_chu); btn_cheng = (Button) findViewById(R.id.btn_cheng); btn_jia = (Button) findViewById(R.id.btn_jia); btn_jian = (Button) findViewById(R.id.btn_jian); btn_deng = (Button) findViewById(R.id.btn_deng); btn_dian = (Button) findViewById(R.id.btn_dian); btn_9 = (Button) findViewById(R.id.btn_9); btn_8 = (Button) findViewById(R.id.btn_8); btn_7 = (Button) findViewById(R.id.btn_7); btn_6 = (Button) findViewById(R.id.btn_6); btn_5 = (Button) findViewById(R.id.btn_5); btn_4 = (Button) findViewById(R.id.btn_4); btn_3 = (Button) findViewById(R.id.btn_3); btn_2 = (Button) findViewById(R.id.btn_2); btn_1 = (Button) findViewById(R.id.btn_1); btn_0 = (Button) findViewById(R.id.btn_0); input = (EditText) findViewById(R.id.input); btn_0.setOnClickListener(this); btn_1.setOnClickListener(this); btn_2.setOnClickListener(this); btn_3.setOnClickListener(this); btn_4.setOnClickListener(this); btn_5.setOnClickListener(this); btn_6.setOnClickListener(this); btn_7.setOnClickListener(this); btn_8.setOnClickListener(this); btn_9.setOnClickListener(this); btn_yu.setOnClickListener(this); btn_chu.setOnClickListener(this); btn_cheng.setOnClickListener(this); btn_jia.setOnClickListener(this); btn_jian.setOnClickListener(this); btn_deng.setOnClickListener(this); btn_dian.setOnClickListener(this); btn_C.setOnClickListener(this); btn_del.setOnClickListener(this); } @Override public void onClick(View v) { String str = input.getText().toString(); if (str.equals("0")) { str = ""; } switch (v.getId()) { case R.id.btn_0: case R.id.btn_1: case R.id.btn_2: case R.id.btn_3: case R.id.btn_4: case R.id.btn_5: case R.id.btn_6: case R.id.btn_7: case R.id.btn_8: case R.id.btn_9: case R.id.btn_dian: if (clear_ed) { clear_ed = false; str = ""; input.setText("0"); //重置为0 } input.setText(str + ((Button) v).getText()); //根据按钮的setText来添加数字 break; case R.id.btn_jia: case R.id.btn_jian: case R.id.btn_cheng: case R.id.btn_chu: input.setText(str + " " + ((Button) v).getText() + " "); //为区分加减乘除和数字 特意留了空格为间隔, break; case R.id.btn_C: input.setText("0"); //重置为0 break; case R.id.btn_del: if (input.length() <= 1 || input.getText().toString().equals("")) { input.setText("0"); } else { input.setText(str.substring(0, str.length() - 1)); // 删除末尾一个数 由0开始 到str长度减1. } break; case R.id.btn_deng: getResult(); break; case R.id.btn_yu: Double d3 = Double.parseDouble(str); Double d4 = d3 * 0.01; input.setText(d4 + ""); break; } } private void getResult() { String exp = input.getText().toString(); if (exp == null || exp.equals("")) { //如果exp为空的话结束 return; } if (!exp.contains(" ")) {//如果exp没有为预算法预留的“空格”的话结束 return; } clear_ed = true; double result = 0; String s1 = exp.substring(0, exp.indexOf(" ")); //定义s1的内容是 运算符前的那串数字 String op = exp.substring(exp.indexOf(" ") + 1, exp.indexOf(" ") + 2);//运算符 String s2 = exp.substring(exp.indexOf(" ") + 3); //定义s2的内容是 运算符前的那串数字 System.out.println(s1); System.out.println(op); System.out.println(s2); if (!s1.equals("") && !s2.equals("")) { //分四种情况来写,s1 s2都不为null。s1 为null,s2不为。s1不为,s2为空。s12都为空的 double d1 = Double.parseDouble(s1); //转化为double型 double d2 = Double.parseDouble(s2); if (op.equals("+")) { //加法运算 result = d1 + d2; } else if (op.equals("-")) { //减法运算 result = d1 - d2; } else if (op.equals("×")) { //乘法运算 result = d1 * d2; } else if (op.equals("÷")) { //除法运算 if (d2 == 0) { //如果分母为0,那么结果为0 result = 0; } else { result = d1 / d2; } } //将算好了的结果,再根据是否包含小数点来 决定输出的结果类型:整型还是双精度型 if (!s1.contains(".") && !s2.contains(".")) { //如果s1、s2都不包含小数点,那么他们是整型 int r = (int) result; //转化为int型 input.setText(r + ""); } else { input.setText(result + ""); } } else if (!s1.equals("") && s2.equals("")) { //如果s1不为空,s2为空 input.setText(exp); //结果不作处理,原样输出 } else if (s1.equals("") && s2.equals("")) { //都为空 input.setText(exp); //结果不作处理,原样输出 } else if (s1.equals("") && !s2.equals("")) { //如果s1为空,s2不为空 double d2 = Double.parseDouble(s2); if (op.equals("+")) { //加法运算 result = 0 + d2; } else if (op.equals("-")) { //减法运算 result = 0 - d2; } else if (op.equals("×")) { //乘法运算 result = 0; } else if (op.equals("÷")) { //除法运算 result = 0; } //将算好了的结果,再根据是否包含小数点来 决定输出的结果类型:整型还是双精度型 if (!s2.contains(".")) { //如果s1、s2都不包含小数点,那么他们是整型 int r = (int) result; //转化为int型 input.setText(r + ""); } else { input.setText(result + ""); } } } }
后期再添加些注释,先偷会懒。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories