我们要做个简易的计算器,代码基本转载自:http://startandroid.ru/en/lessons/complete-list/225-lesson-19-creating-a-simple-calculator.html
做了些修改,步骤及注释如下:
一、做布局
1. 在res/layout下的activity_main.xml文件编辑
2. 设置2个EditText用来放置2个输入值
3. 设置4个Button显示运算符
4. 设置1个TextView显示运算过程及结果
4. 控件一般需要设置的属性值有:id、layout_width、layout_height、orientation(方向)、layout_marginLeft(离左边距)、
layout_weight(权重,比如2个控件权重都设为1,则2个控件各占空间的1/2)、text(内容)、textSize(字体大小)、gravity(控件内容重心)
layout_gravity(子控件相对父类的重心)
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
android:id="@+id/linearLayout1"
android:layout_width="match_parent" //视图填充全部
android:layout_height="wrap_content" //视图扩展以显示全部内容
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="3dp" >
android:id="@+id/etNum1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:layout_weight="1"
android:inputType="numberDecimal" > //可以带小数点的浮点格式
android:id="@+id/etNum2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_weight="1"
android:inputType="numberDecimal" >
android:id="@+id/linearLayout2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="3dp" >
android:id="@+id/btnAdd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="+"
android:textSize="8dp" >
android:id="@+id/btnSub"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="-"
android:textSize="8dp" >
android:id="@+id/btnMult"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="*"
android:textSize="8dp" >
android:id="@+id/btnDiv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="/"
android:textSize="8dp" >
android:id="@+id/tvResult"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="3dp"
android:gravity="center_horizontal" //内容垂直居中显示
android:textSize="12dp" >
===============================================
二、实例化控件并实现业务逻辑
1. 声明各控件变量
2. 调用findViewById方法实例化元素
3. 调用setOnClickListener方法来对运算符button设置监听器
4. etNum1或etNum2为空,返回空
5. 读取EditText值并转化成Float类型数据
6. 使用switch语句,由不同运算符的Id值,获得对应的result值
7. 运算过程和结果显示在TextView里
8. 创建OptionsMenu
9. 点击选项菜单(OptionsMenu:点击menu弹出的菜单)的菜单项时即调调用了onOptionsItemSelected 方法,传入item的Id值,进行清空或退出应用程序的操作
10. res/values/ 的strings.xml文件添加menu_reset和menu_quit两个字符串
11. res/menu下新建menu.xml文件,引用strings.xml内容,以及添加自己的Item
package com.example.simplecalculator;
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener {
//1. 声明各控件变量
EditText etNum1;
EditText etNum2;
Button btnAdd;
Button btnSub;
Button btnMult;
Button btnDiv;
TextView tvResult;
String oper = "";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//2.调用findViewById方法实例化元素
etNum1 = (EditText) findViewById(R.id.etNum1);
etNum2 = (EditText) findViewById(R.id.etNum2);
btnAdd = (Button) findViewById(R.id.btnAdd);
btnSub = (Button) findViewById(R.id.btnSub);
btnMult = (Button) findViewById(R.id.btnMult);
btnDiv = (Button) findViewById(R.id.btnDiv);
tvResult = (TextView) findViewById(R.id.tvResult);
// 3.调用setOnClickListener方法来对运算符button设置监听器
btnAdd.setOnClickListener(this); //MainActivity已经实现onClick方法,因此直接传this就可
btnSub.setOnClickListener(this);
btnMult.setOnClickListener(this);
btnDiv.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
float num1 = 0;
float num2 = 0;
float result = 0;
// 4.etNum1或etNum2为空,返回空
if (TextUtils.isEmpty(etNum1.getText().toString())
|| TextUtils.isEmpty(etNum2.getText().toString())) {
return;
}
// 5.读取EditText值并转化成Float类型数据
num1 = Float.parseFloat(etNum1.getText().toString());
num2 = Float.parseFloat(etNum2.getText().toString());
// 6.使用switch语句,由不同运算符的Id值,获得对应的result值
switch (v.getId()) {
case R.id.btnAdd:
oper = "+";
result = num1 + num2;
break;
case R.id.btnSub:
oper = "-";
result = num1 - num2;
break;
case R.id.btnMult:
oper = "*";
result = num1 * num2;
break;
case R.id.btnDiv:
oper = "/";
result = num1 / num2;
break;
default:
break;
}
// 7.运算过程和结果显示在TextView里
tvResult.setText(num1 + " " + oper + " " + num2 + " = " + result);
}
// 8.创建OptionsMenu
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
// 9.点击选项菜单(OptionsMenu:点击menu弹出的菜单)的菜单项时即调调用了onOptionsItemSelected 方法,传入item的Id值,进行清空或退出应用程序的操作
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.item01:
// 清空
etNum1.setText("");
etNum2.setText("");
tvResult.setText("");
break;
case R.id.item02:
// 退出应用程序
finish();
break;
}
return super.onOptionsItemSelected(item);
}
}
===============================================================
10. res/values/ 的strings.xml文件添加menu_reset和menu_quit两个字符串
SimpleCalculator
Settings
Hello world!
Reset
Quit
================================================================
11. res/menu下新建menu.xml文件,引用strings.xml内容,以及添加自己的Item
android:title="@string/menu_reset"
android:id="@+id/item01">
android:title="@string/menu_quit"
android:id="@+id/item02">
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30106286/viewspace-1437297/
,如需转载,请注明出处,否则将追究法律责任。