您的位置:首页 > 移动开发 > Android开发

android学习笔记第四弹之网格布局的简易计算器实现

2014-03-10 10:36 295 查看
计算器是我学习android的第一个练习项目,就在昨天才做成。

今天在图书馆淘到一本有关android实战的书。里面同样有计算器项目介绍。首先这里是我自己写的android计算器,内容没有层次,布局不合理,健壮性也不够,但是有对比才知道哪里不足,今天特地在学习计算器V2.0之前把我自己做的搓的不像样的计算器源码分享,也给自己留个念想,以后不能做这种没有一点规范的项目了。

所以过几天等到我把书上的计算器学完之后一定和大家分享高手写代码的艺术。将在第五弹中呈现.

首先是xml布局文件,我采用的是网格布局,这个是在4.0之后新出现的布局方式,要了解网格布局的朋友看看我的xml布局,不想看的我就直接告诉你网格布局的重要点吧,

1.首先就是在GridLayout标签里定义rowCount和columnCount,定义行数和列数。

2.在各个组件里定义组件位置,定义layout_row和layout_column

3.想让组件可以横跨多个行列就可以定义layout_rowSpan和layout_columnSpan,定义了不显示应该有的效果,就需要考虑layout_gravity,让组件以什么方式充满布局单元,有fill_horizontal(行) ,fill_vertical(充满列),fill(充满行列)

<?xml version="1.0" encoding="utf-8"?>

<GridLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:rowCount="6"

android:columnCount="5" >

<EditText

android:id="@+id/editText1"

android:layout_columnSpan="5"

android:layout_row="0"

android:cursorVisible="false"

android:layout_width="fill_parent"

android:layout_height="120dp"

android:minLines="4">

</EditText>

<Button

android:id="@+id/button1"

android:layout_column="0"

android:layout_row="1"

android:text="后退" />

<Button

android:id="@+id/button2"

android:layout_column="1"

android:layout_row="1"

android:text="-/+"/>

<Button

android:id="@+id/button3"

android:layout_row="1"

android:layout_column="2"

android:text="1/X"/>

<Button

android:id="@+id/button4"

android:layout_row="1"

android:layout_column="3"

android:layout_columnSpan="2"

android:text="清屏"

android:layout_gravity="fill"/>

<Button

android:id="@+id/buttonInt7"

android:layout_row="2"

android:layout_column="0"

android:text="7"

android:onClick="IntOnClick"

android:tag="7"/>

<Button

android:id="@+id/buttonInt8"

android:layout_row="2"

android:layout_column="1"

android:text="8"

android:tag="8"

/>

<Button

android:id="@+id/buttonInt9"

android:layout_row="2"

android:layout_column="2"

android:text="9"

android:tag="9"

/>

<Button

android:id="@+id/buttonChu"

android:layout_row="2"

android:layout_column="3"

android:text="÷"

android:tag="/"/>

<Button

android:id="@+id/buttonBaifen"

android:layout_row="2"

android:layout_column="4"

android:text="%"/>

<!-- 第三行 -->

<Button

android:id="@+id/buttonInt4"

android:layout_row="3"

android:layout_column="0"

android:tag="4"

android:text="4"

/>

<Button

android:id="@+id/buttonInt5"

android:layout_row="3"

android:layout_column="1"

android:text="5"

android:tag="5"

/>

<Button

android:id="@+id/buttonInt6"

android:layout_row="3"

android:layout_column="2"

android:text="6"

android:tag="6"

/>

<Button

android:id="@+id/buttoncheng"

android:layout_row="3"

android:layout_column="3"

android:text="X"

android:tag="*"/>

<Button

android:id="@+id/buttonGenhao"

android:layout_row="3"

android:layout_column="4"

android:text="√"/>

<!-- 第四行 -->

<Button

android:id="@+id/buttonInt1"

android:layout_row="4"

android:layout_column="0"

android:text="1"

android:tag="1"/>

<Button

android:id="@+id/buttonInt2"

android:layout_row="4"

android:layout_column="1"

android:text="2"

android:tag="2"/>

<Button

android:id="@+id/buttonInt3"

android:layout_row="4"

android:layout_column="2"

android:text="3"

android:tag="3"

/>

<Button

android:id="@+id/buttonjia"

android:layout_row="4"

android:layout_column="3"

android:text="+"

android:tag="+"/>

<Button

android:id="@+id/buttonjian"

android:layout_row="4"

android:layout_column="4"

android:text="-"

android:tag="-"/>

<!-- 第五行 -->

<Button

android:id="@+id/buttonInt0"

android:layout_row="5"

android:layout_column="0"

android:layout_columnSpan="2"

android:text="0"

/>

<Button

android:id="@+id/buttonDian"

android:layout_row="5"

android:layout_column="1"

android:text="."/>

<Button

android:id="@+id/buttonDengyu"

android:layout_row="5"

android:layout_column="2"

android:layout_columnSpan="3"

android:layout_gravity="fill_horizontal"

android:text="="/>

</GridLayout>

接下来就是android的主程序代码,我就只有一个文件,里面有几个内部类(实现了监听器的接口),还有一个特别重要的关于对只有两个数字和一个运算法的字符串解析的算法,这个就是我自己想的了,由于功能太简单,有时还报异常,多多借鉴。

package com.example.jisuanqi;

import android.os.Bundle;

import android.widget.EditText;

import android.widget.Toast;

import android.app.Activity;

import android.util.Log;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class MainActivity extends Activity {

public String[] fuhao=new String[]{"+","-","*","/"};

public EditText editView;

public Button button0;

public Button button1;

public Button button2;

public Button button3;

public Button button4;

public Button button5;

public Button button6;

public Button button7;

public Button button8;

public Button button9;

public Button buttondengyu;

public Button buttoncheng;

public Button buttonchu;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Button[] buttonInt=new Button[]{

button0=(Button)this.findViewById(R.id.buttonInt0),

button1=(Button)this.findViewById(R.id.buttonInt1),

button2=(Button)this.findViewById(R.id.buttonInt2),

button3=(Button)this.findViewById(R.id.buttonInt3),

button4=(Button)this.findViewById(R.id.buttonInt4),

button5=(Button)this.findViewById(R.id.buttonInt5),

button6=(Button)this.findViewById(R.id.buttonInt6),

button7=(Button)this.findViewById(R.id.buttonInt7),

button8=(Button)this.findViewById(R.id.buttonInt8),

button9=(Button)this.findViewById(R.id.buttonInt9),

};

editView=(EditText)this.findViewById(R.id.editText1);

//button0.setOnClickListener(new IntOnClick(this));

//开始 对数字button付 监听器

for(int i=0;i<buttonInt.length;i++){

buttonInt[i].setOnClickListener(new IntOnClick());

}

//获得算法button

Button[] buttonSuanfa=new Button[]{

(Button)findViewById(R.id.buttonjia),

(Button)findViewById(R.id.buttonjian),

(Button)findViewById(R.id.buttoncheng),

(Button)findViewById(R.id.buttonChu),

};

//为算法button设置监听

for(int i=0;i<buttonSuanfa.length;i++){

buttonSuanfa[i].setOnClickListener(new IntOnClick());

}

//为=button设置响应

Button buttondengyu=(Button)findViewById(R.id.buttonDengyu);

buttondengyu.setOnClickListener(new dengyu(this));

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

/*

* 为 数字Button服务的Onclick事件

*/

public class IntOnClick implements OnClickListener {

@Override

public void onClick(View arg0) {

// TODO Auto-generated method stub

EditText editText=(EditText)findViewById(R.id.editText1);

Log.d("lyb","onclick");

Button button=(Button)arg0;

String message=editText.getText().toString();

message=message+button.getTag();

editText.setText(message);

}

}

/*

* 为 数字Button服务的Onclick事件

*/

public class Suanfa implements OnClickListener {

@Override

public void onClick(View arg0) {

// TODO Auto-generated method stub

EditText editText=(EditText)findViewById(R.id.editText1);

Log.d("lyb","suanfa");

Button button=(Button)arg0;

String message=editText.getText().toString();

message=message+button.getTag();

editText.setText(message);

}

}

public class dengyu implements OnClickListener{

public Activity activity;

public dengyu(Activity activity){

this.activity=activity;

}

@Override

public void onClick(View v) {

EditText editView=(EditText)findViewById(R.id.editText1);

String message=editView.getText().toString();

int indexOf=-1;

String jjcc=null;

for(int i=0;i<fuhao.length;i++){

//System.out.println(fuhao[i]);

String temp=fuhao[i];

if(message.indexOf(fuhao[i])!=-1){

indexOf=message.indexOf(temp);

//System.out.println(indexOf);

jjcc=temp;

}

}

if(jjcc==null){

Toast.makeText(activity, "表达式有误", 1);

}

int length=message.length();

String preS=message.substring(0,indexOf);

String houS=message.substring(indexOf+1,length);

int pre=Integer.parseInt(preS);

int hou=Integer.parseInt(houS);

int result=9999;

if(jjcc=="+"){

result=pre+hou;

}

if(jjcc=="-"){

result=pre-hou;

}

if(jjcc=="*"){

result=pre*hou;

}

if(jjcc=="/"){

result=pre/hou;

}

String jieguo=String.valueOf(result);

Log.d("lyb", jieguo);

editView.setText(jieguo);

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: