【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+" ");    }    */            }

整体实现效果如下:


2 0
原创粉丝点击