小文章主要想通过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=