【android】用EditText控件和Button控件实现一个简易计算器
来源:互联网 发布:苹果手机mac在哪里设置 编辑:程序博客网 时间:2024/06/05 05:31
小文章主要想通过EditText控件和Button控件实现一个简易的计算器。计算器见面如下图:
先来看几个小细节的处理:
(1)按Button键时,背景颜色变化的处理(“=”号键在按下时由原来的橘红色变土色,其余键由原来的白色变为灰色)。
我们这里就已清除键C为例。先在res文件夹下新建一个drawable文件夹,然后新建一个类型为shape的XML文件并做如下定义(android:radius设置按键四角为圆角;android:color此时设置为白色):
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" > <corners android:radius="5dp"/> <solid android:color="#ffffffff"/></shape>按相同的办法,再定义一个灰色的xml文件:
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" > <corners android:radius="5dp"/> <solid android:color="#ffDEDEDE"/></shape>那怎么实现在按键的时候能使按键由白色变成灰色呢?下面我们马上来看看:在/res/drawable定义一个selector的xml文件并作如下定义(android:drawable/white为按键刚开始背景颜色,android:drawable/gray为按键背景被按下后的颜色,同时,设置state_pressed为true):
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/gray" android:state_pressed="true"/> <item android:drawable="@drawable/white"/></selector>然后在Activity.xml文件中通过属性android:backgroup属性引用这个xml文件就可以实现这个效果,我们马上来看看按键clear在Activity.xml文件中的实现吧:
<Button android:id="@+id/button_clear" android:gravity="right|bottom" android:layout_width="60dp" android:layout_height="60dp" android:paddingTop="10dp" android:paddingRight="10dp" android:textSize="20sp" <strong>android:background="@drawable/whitetogray"</strong> android:text="C"/>效果如下:
(2)关于EditText控件用于显示而不能输入以及背景的实现:平常EditText控件使用最多的恐怕是当作输入框来实现,如果要实现EditText控件只能作为显示肉不能作为输出,这时,EditText控件的editable属性就起到了非常重要的作用(即把android:editable设置为false),下面来看下EditText控件在Activity.xml中的实现吧:
<EditText android:id="@+id/Edit_Text" android:layout_width="match_parent" android:layout_height="60dp" android:background="@drawable/white" android:textSize="20sp" android:editable="false" android:gravity="right|bottom" />android:gravity="right|bottom"属性设置使显示在EditText框内的文字能够从右向左显示,这也符合我们的视觉习惯,哈哈哈。
(3)关于按键布局的处理:这边我建议以整体的思维去考虑这个为题,a、整体上看成是<linearLayout下属性为android:oriention为竖直的布局(即EditText控件和整个大Button控件成竖直排列);b、下方Button控件,可以先把它以行分为4个小布局,前三行每行为一个属性为android:oriention为水平的LinearLayout排列,最后两行我们也先堪称一个一个属性android:oriention为水平的LinearLayout排列(前三列为一个子布局(再按属性为竖直的直线布局),后面一个为单独一个自布局),代码如下:
<LinearLayout 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" android:orientation="vertical" android:gravity="center_horizontal" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.cactest.MainActivity" > <EditText android:id="@+id/Edit_Text" android:layout_width="match_parent" android:layout_height="60dp" android:background="@drawable/white" android:textSize="20sp" android:editable="false" android:gravity="right|bottom" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:layout_marginTop="10dip" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:layout_marginTop="10dp" android:orientation="horizontal"> <Button android:id="@+id/button_clear" android:gravity="right|bottom" android:layout_width="60dp" android:layout_height="60dp" android:paddingTop="10dp" android:paddingRight="10dp" android:textSize="20sp" android:background="@drawable/whitetogray" android:text="C"/> <Button android:id="@+id/button_delete" android:gravity="right|bottom" android:layout_width="60dp" android:layout_height="60dp" android:paddingTop="10dp" android:paddingRight="10dp" android:layout_marginLeft="10dp" android:textSize="20sp" android:background="@drawable/whitetogray" android:text="Del"/> <Button android:id="@+id/button_add" android:gravity="right|bottom" android:layout_width="60dp" android:layout_height="60dp" android:paddingTop="10dp" android:paddingRight="10dp" android:layout_marginLeft="10dp" android:textSize="20sp" android:background="@drawable/whitetogray" android:text="+"/> <Button android:id="@+id/button_mul" android:gravity="right|bottom" android:layout_width="60dp" android:layout_height="60dp" android:paddingTop="10dp" android:paddingRight="10dp" android:layout_marginLeft="10dp" android:textSize="20sp" android:background="@drawable/whitetogray" android:text="×"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:layout_marginTop="10dp" android:orientation="horizontal"> <Button android:id="@+id/button_7" android:gravity="right|bottom" android:layout_width="60dp" android:layout_height="60dp" android:paddingTop="10dp" android:paddingRight="10dp" android:textSize="20sp" android:background="@drawable/whitetogray" android:text="7"/> <Button android:id="@+id/button_8" android:gravity="right|bottom" android:layout_width="60dp" android:layout_height="60dp" android:paddingTop="10dp" android:paddingRight="10dp" android:layout_marginLeft="10dp" android:textSize="20sp" android:background="@drawable/whitetogray" android:text="8"/> <Button android:id="@+id/button_9" android:gravity="right|bottom" android:layout_width="60dp" android:layout_height="60dp" android:paddingTop="10dp" android:paddingRight="10dp" android:layout_marginLeft="10dp" android:textSize="20sp" android:background="@drawable/whitetogray" android:text="9"/> <Button android:id="@+id/button_sub" android:gravity="right|bottom" android:layout_width="60dp" android:layout_height="60dp" android:paddingTop="10dp" android:paddingRight="10dp" android:layout_marginLeft="10dp" android:textSize="20sp" android:background="@drawable/whitetogray" android:text="-"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:layout_marginTop="10dp" android:orientation="horizontal"> <Button android:id="@+id/button_4" android:gravity="right|bottom" android:layout_width="60dp" android:layout_height="60dp" android:paddingTop="10dp" android:paddingRight="10dp" android:textSize="20sp" android:background="@drawable/whitetogray" android:text="4"/> <Button android:id="@+id/button_5" android:gravity="right|bottom" android:layout_width="60dp" android:layout_height="60dp" android:paddingTop="10dp" android:paddingRight="10dp" android:layout_marginLeft="10dp" android:textSize="20sp" android:background="@drawable/whitetogray" android:text="5"/> <Button android:id="@+id/button_6" android:gravity="right|bottom" android:layout_width="60dp" android:layout_height="60dp" android:paddingTop="10dp" android:paddingRight="10dp" android:layout_marginLeft="10dp" android:textSize="20sp" android:background="@drawable/whitetogray" android:text="6"/> <Button android:id="@+id/button_mins" android:gravity="right|bottom" android:layout_width="60dp" android:layout_height="60dp" android:paddingTop="10dp" android:paddingRight="10dp" android:layout_marginLeft="10dp" android:textSize="20sp" android:background="@drawable/whitetogray" android:text="÷"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:gravity="center_horizontal" android:orientation="horizontal"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="vertical"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal"> <Button android:id="@+id/button_1" android:gravity="right|bottom" android:layout_width="60dp" android:layout_height="60dp" android:layout_alignLeft="@+id/button_4" android:paddingTop="10dp" android:paddingRight="10dp" android:textSize="20sp" android:background="@drawable/whitetogray" android:text="1"/> <Button android:id="@+id/button_2" android:gravity="right|bottom" android:layout_width="60dp" android:layout_height="60dp" android:layout_alignLeft="@+id/button_5" android:paddingTop="10dp" android:paddingRight="10dp" android:layout_marginLeft="10dp" android:textSize="20sp" android:background="@drawable/whitetogray" android:text="2"/> <Button android:id="@+id/button_3" android:gravity="right|bottom" android:layout_width="60dp" android:layout_height="60dp" android:layout_alignLeft="@+id/button_6" android:paddingTop="10dp" android:paddingRight="10dp" android:layout_marginLeft="10dp" android:textSize="20sp" android:background="@drawable/whitetogray" android:text="3"/> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:gravity="center_horizontal" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:orientation="horizontal"> <Button android:id="@+id/button_0" android:gravity="right|bottom" android:layout_width="130dp" android:layout_height="60dp" android:paddingTop="10dp" android:paddingRight="10dp" android:textSize="20sp" android:background="@drawable/whitetogray" android:text="0"/> <Button android:id="@+id/button_point" android:gravity="right|bottom" android:layout_width="60dp" android:layout_height="60dp" android:paddingTop="10dp" android:paddingRight="10dp" android:layout_marginLeft="10dp" android:textSize="20sp" android:background="@drawable/whitetogray" android:text="."/> </LinearLayout> </LinearLayout> <Button android:id="@+id/button_equals" android:gravity="right|bottom" android:layout_width="60dp" android:layout_height="130dp" android:layout_marginLeft="10dp" android:paddingTop="10dp" android:paddingRight="10dp" android:textSize="20sp" android:background="@drawable/orangetoashen" android:text="="/> </LinearLayout> </LinearLayout></LinearLayout>
计算器的Acitvity.java中的实现就中规中矩:1)实例化;2)实现监听器;3)实现计算逻辑。比较简单就直接看代码吧:
public class MainActivity extends Activity implements OnClickListener{private EditText mEditText;private Button mbutton_c;private Button mbutton_1;private Button mbutton_2;private Button mbutton_3;private Button mbutton_4;private Button mbutton_5;private Button mbutton_6;private Button mbutton_7;private Button mbutton_8;private Button mbutton_9;private Button mbutton_add;private Button mbutton_sub;private Button mbutton_mul;private Button mbutton_mins;private Button mbutton_point;private Button mbutton_equals;private Button mbutton_del;private Button mbutton_0;boolean clearflag; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mEditText = (EditText) findViewById(R.id.Edit_Text); mbutton_0 = (Button) findViewById(R.id.button_0); mbutton_1 = (Button) findViewById(R.id.button_1); mbutton_2 = (Button) findViewById(R.id.button_2); mbutton_3 = (Button) findViewById(R.id.button_3); mbutton_4 = (Button) findViewById(R.id.button_4); mbutton_5 = (Button) findViewById(R.id.button_5); mbutton_6 = (Button) findViewById(R.id.button_6); mbutton_7 = (Button) findViewById(R.id.button_7); mbutton_8 = (Button) findViewById(R.id.button_8); mbutton_9 = (Button) findViewById(R.id.button_9); mbutton_point = (Button) findViewById(R.id.button_point); mbutton_c = (Button) findViewById(R.id.button_clear); mbutton_del = (Button) findViewById(R.id.button_delete); mbutton_equals = (Button) findViewById(R.id.button_equals); mbutton_add = (Button) findViewById(R.id.button_add); mbutton_sub = (Button) findViewById(R.id.button_sub); mbutton_mul = (Button) findViewById(R.id.button_mul); mbutton_mins = (Button) findViewById(R.id.button_mins); mbutton_0.setOnClickListener(this); mbutton_1.setOnClickListener(this); mbutton_2.setOnClickListener(this); mbutton_3.setOnClickListener(this); mbutton_4.setOnClickListener(this); mbutton_5.setOnClickListener(this); mbutton_6.setOnClickListener(this); mbutton_7.setOnClickListener(this); mbutton_8.setOnClickListener(this); mbutton_9.setOnClickListener(this); mbutton_point.setOnClickListener(this); mbutton_c.setOnClickListener(this); mbutton_del.setOnClickListener(this); mbutton_add.setOnClickListener(this); mbutton_sub.setOnClickListener(this); mbutton_mul.setOnClickListener(this); mbutton_mins.setOnClickListener(this); mbutton_equals.setOnClickListener(this); } public void onClick(View v) { String str = mEditText.getText().toString(); switch(v.getId()) { case R.id.button_0: case R.id.button_1: case R.id.button_2: case R.id.button_3: case R.id.button_4: case R.id.button_5: case R.id.button_6: case R.id.button_7: case R.id.button_8: case R.id.button_9: case R.id.button_point: mEditText.setText(str+((Button)v).getText()); break; case R.id.button_add: case R.id.button_sub: case R.id.button_mul: case R.id.button_mins: mEditText.setText(str+" "+((Button)v).getText()+" "); break; case R.id.button_clear: mEditText.setText(""); break; case R.id.button_delete: if(str != null && !str.equals(" ")) { mEditText.setText(str.substring(0, str.length()-1)); } break; case R.id.button_equals: Log.i("there","="); getResult(); break; default: } } public void getResult() { Log.i("=", "here"); double r = 0; String exp = mEditText.getText().toString(); if(exp == null) { return; } int space = exp.indexOf(" "); String s1 = exp.substring(0, space); String op = exp.substring(space+1, space+2); String s2 = exp.substring(space+3); double arg1 = Double.parseDouble(s1); double arg2 = Double.parseDouble(s2); if(op.equals("+")) { r = arg1 + arg2; } if(op.equals("-")) { r = arg1 - arg2; } if(op.equals("×")) { r = arg1 * arg2; } if(op.equals("÷")) { if(arg2 == 0) { r = 0; }else { r = arg1 / arg2; } } mEditText.setText(r+" "); /** if(!s1.contains(".")&&!s2.contains(".")) { int result = (int)r; mEditText.setText(result+" "); }else { mEditText.setText(r+" "); } */ }
整体实现效果如下:
- 【android】用EditText控件和Button控件实现一个简易计算器
- Android实现简单计算器功能(Button控件实现)
- 常用控件的使用方法--(TextView/EditText/Button/Menu) -计算器代码
- Android基础学习 - 简单控件,EditText 、 Button :
- 2.Android基础:常见控件----->EditText、Button
- Android自定义组合控件--EditText和Button组合成带有清空EditText内容功能的复合控件
- Android控件——TextView、EditText、ImageView、Button、ImageButton
- Android常见的几个控件(TextView,EditText,Button)
- Android基本常用控件的介绍TextView EditText Button Menu
- Android学习(一)TextView,ImageView,Button,EditText,控件
- Android控件 - TextView、Button、EditText、CompoundButton、CheckBox简介
- Android02--Android之UI控件TextView+Button+EditText
- Android的常见控件(TextView、EditText、Button、Menu)使用
- 一个简单的自定义EditText控件实现
- Button、ImageButton、和EditText等控件会主动抢夺焦点
- Button、ImageButton、和EditText等控件会主动抢夺焦点
- Android用户界面基础之TextView控件,EditText控件,Button控件的学习
- Android 简易计算器实现
- GTK+浅谈之九控件的外观样式
- OCP-V13-704
- iOS集成支付宝
- Mac iOS推送测试
- 2013.10-2015.9 图书馆借阅书籍情况
- 【android】用EditText控件和Button控件实现一个简易计算器
- 函数名作为另一函数的参数
- 23设计模式之装饰模式(Decorator)
- ubuntu 网络配置
- 复杂链表的复制
- PHP几个防SQL注入攻击自带函数区别 .
- 【PMP考试资料】重磅利器!高频关键词锁定答案!!
- opencv鼠标画矩形截取保存图片一部分并归一化为原图大小(Patches selected for feature extraction)
- <the hacker guide to python>读书笔记