【android】用EditText控件和Button控件实现一个简易计算器

Android 随笔 专栏收录该内容
11 篇文章 0 订阅

           小文章主要想通过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+" ");
    	}
    	*/
    	
    	
    }

整体实现效果如下:


  • 6
    点赞
  • 1
    评论
  • 9
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值