计算器是较为基础的一个程序,但因为组件较多,在布局方面有着不小的考验。所以,这里就通过计算器界面的实现来对Android布局组件进行一个简单的总结。
和javaSE不同,Android的UI中,布局也算是一种组件(不过根据笔者后期学习的经验,布局和其他组件不同的是,虽然理论上可以添加监听器,但并不会触发Android事件,所以并不能像其他组件那样实现监听)。对于布局的管理和其他组件一样,都是通过layout文件来进行。
常用的Android组件包括LinearLayout(线性布局)、RelativeLayout(相对布局)、TableLayout(表格布局)、GridLayout(网格布局)。
如果在设置界面是,直接选择了从可视化界面进行拖动,那么默认的就是选择了相对布局。选择这种布局的局限就在于组件之间通常由固定的距离来进行定位,因而对于不同屏幕大小的手机可能会产生完全不同的效果,所以在选择是一般不太建议全部使用相对布局。
其他几种布局中,笔者最为喜欢的是LinearLayout布局,所以这里就着重介绍下通过LinearLayout来实现一个较为好看的计算器布局的方法。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="#e3e7e9" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="50dp" > <EditText android:id="@+id/et_caculateArea" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="0"> <requestFocus /> </EditText> </LinearLayout> <!-- 第一行按键 --> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:orientation="horizontal" android:padding="0dp" android:layout_weight="1" android:layout_gravity="center_horizontal"> <Button android:id="@+id/bt_clear" android:background="@drawable/color_state" android:layout_width="match_parent" android:layout_height="fill_parent" android:textColor="#ee6d29" android:text="C" android:layout_weight="1" /> <Button android:id="@+id/bt_cut" android:layout_width="match_parent" android:layout_height="fill_parent" android:layout_marginLeft="2dp" android:textColor="#979ca4" android:layout_weight="1" android:text=" " android:background="@drawable/back_state"/> <Button android:id="@+id/bt_devide" android:layout_width="match_parent" android:layout_height="fill_parent" android:layout_marginLeft="2dp" android:textColor="#979ca4" android:text="÷" android:layout_weight="1" android:background="@drawable/color_state"/> <Button android:id="@+id/bt_multiply" android:layout_width="match_parent" android:layout_height="fill_parent" android:layout_marginLeft="2dp" android:layout_weight="1" android:textColor="#979ca4" android:background="@drawable/color_state" android:text="x"/> </LinearLayout> <!-- 第二行 --> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:orientation="horizontal" android:padding="0dp" android:layout_weight="1" android:gravity="center"> <Button android:id="@+id/bt_seven" android:background="@drawable/color_state" android:layout_width="wrap_content" android:layout_height="fill_parent" android:textColor="#979ca4" android:text="7" android:layout_weight="1" /> <Button android:id="@+id/bt_eight" android:background="@drawable/color_state" android:layout_width="wrap_content" android:layout_height="fill_parent" android:textColor="#979ca4" android:layout_marginLeft="2dp" android:text="8" android:layout_weight="1" /> <Button android:id="@+id/bt_nine" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_marginLeft="2dp" android:textColor="#979ca4" android:text="9" android:background="@drawable/color_state" android:layout_weight="1" /> <Button android:id="@+id/bt_jian" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_marginLeft="2dp" android:textColor="#979ca4" android:background="@drawable/color_state" android:text="-" android:layout_weight="1" /> </LinearLayout> <!-- 第三行按键 --> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:orientation="horizontal" android:padding="0dp" android:layout_weight="1" android:gravity="center" > <Button android:id="@+id/bt_four" android:background="@drawable/color_state" android:layout_width="fill_parent" android:layout_height="fill_parent" android:textColor="#979ca4" android:text="4" android:layout_weight="1" /> <Button android:id="@+id/bt_five" android:background="@drawable/color_state" android:layout_width="fill_parent" android:layout_height="fill_parent" android:textColor="#979ca4" android:text="5" android:layout_marginLeft="2dp" android:layout_weight="1" /> <Button android:id="@+id/bt_six" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginLeft="2dp" android:textColor="#979ca4" android:text="6" android:background="@drawable/color_state" android:layout_weight="1" /> <Button android:id="@+id/bt_add" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginLeft="2dp" android:textColor="#979ca4" android:background="@drawable/color_state" android:text="+" android:layout_weight="1" /> </LinearLayout> <!-- 最后两行 --> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:orientation="horizontal" android:padding="0dp" android:layout_weight="1" android:gravity="center" android:layout_marginBottom="30dp"> <!-- 放置1230.的线性区域 --> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:gravity="center" android:layout_weight="1"> <!-- 上面的一行 --> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:layout_weight="1" > <Button android:id="@+id/bt_one" android:background="@drawable/color_state" android:layout_width="wrap_content" android:layout_height="fill_parent" android:textColor="#979ca4" android:layout_weight="1" android:text="1" /> <Button android:id="@+id/bt_two" android:background="@drawable/color_state" android:layout_width="wrap_content" android:layout_height="fill_parent" android:textColor="#979ca4" android:text="2" android:layout_weight="1" android:layout_marginLeft="2dp" /> <Button android:id="@+id/bt_three" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_marginLeft="2dp" android:textColor="#979ca4" android:text="3" android:layout_weight="1" android:background="@drawable/color_state"/> </LinearLayout><!-- 上面一行结束 --> <!-- 下面的一行 --> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:layout_weight="1" android:gravity="center" android:layout_marginTop="2dp"> <Button android:id="@+id/bt_zero" android:background="@drawable/color_state" android:layout_width="fill_parent" android:layout_height="fill_parent" android:textColor="#979ca4" android:text="0" android:layout_weight="1" android:layout_marginLeft="0dp" /> <Button android:id="@+id/bt_dot" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginLeft="2dp" android:textColor="#979ca4" android:text="." android:layout_weight="2" android:background="@drawable/color_state"/> </LinearLayout><!-- 下面一行结束 --> </LinearLayout><!-- 左边区域结束 --> <!-- 放置等号的区域 --> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:layout_weight="3"> <Button android:id="@+id/bt_equals" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginLeft="2dp" android:textColor="#979ca4" android:textSize="40dp" android:background="#ee6d29" android:text="="/> </LinearLayout> </LinearLayout> </LinearLayout>
(受制于笔者自身的审美水平,这种布局只能算是我能想到的较为好看的一种了!)
线性布局相当于一种局部的流式布局,可以设置横向和纵向排列。在这个布局的实现过程中,可以将每一排分成一个布局单位,也就是一个横向排列的LinearLayout,在布局中排列四个相应的按钮。为了能使这四行能均匀地纵向分布在布局中,可以将四个布局放置在一个横向的LinearLayout中。这样,就实现了一个计算器的基本界面。
接下来就是细节的完善。首先为了去除组件间的边距(笔者总觉得按钮之间存在距离较为难看),按钮的padding和margin属性通通设置为0。接下来就是组件的height和width了。对于布局组件来说,width和height都可以直接设置成fill_parent。注意,在height被设置成fill_parent后界面上将只能看见一行按钮,因而需要给组件设置weight(如果高度相同,直接将每个都设置成1就行了)。
每个按钮为了保证大小相同,按钮的width同样可以设置成fill_parent,并设置weight。
至于较为奇葩的0和等号了。这两个按钮其实只要弄清楚和同排其他几个按钮的布局关系并设置好weight就行了。(详情看代码)
相关推荐
android studio完成计算器的布局并实现其简单功能,详情看我发布的文章
简易的Android计算器简易的Android计算器
自己写的一个简易的计算器,功能测试通过,基于android studio开发的,新手练习项目。
计算器是基于Android studio开发的一款数字计算app,其中有加、减、乘、除运算,功能增加了括号()
android studio 计算器,渐变色背景,圆形控件,按键变色,带括号,用栈实现
本课题要求学生完成一款计算器,从而了解基于android平台如何开发app应用,了解常见UI控件如何使用。 具体实现要求: Android计算器实现,支持加、减、乘、除、回退、清空等。 要求如下: 1、 支持加、减、乘、除、...
计算器源码 计算器java android计算器
android 计算器开发源代码 包含计算器算法的实现,调试成功,计算器能进行复合运算,能计算含log,ln,sin,cos等的复合运算;文件建议为计算器android项目代码,可用编程工具导入后可调试可编辑;
项目简介 首先此项目是本人学校安卓开发的...Android Studio开发当中的布局是”.XML”的文件格式,普通的初学者也许会使用默认的Constraint Layout布局方式来进行布局,但这里使用的是grid layout(网格布局)很简单的
用Android做的计算器。用Android做的计算器。用Android做的计算器。用Android做的计算器。
android2.1下的仿windows计算器,具有windows中标准计算器的功能。
Android复杂计算器,包括正弦余弦等等功能,使用栈来计算表达式,适合初学者
本实例是Android科学计算器的详细案例介绍,包括所有界面的布局,里面的逻辑功能的代码实现。
简单易懂的安卓计算器源码,并且支持连续计算,纯属菜鸟作品,新手也可借鉴借鉴~~~
本次项目主要实现了简单的计算器功能,包括加减乘除基本运算,还有小数点和清零功能,目前可以进行两个数的计算操作。可以算得上是很好的Android界面和按钮点击事件学习实例。刚用模拟器显示hello world的同学或者...
自己学习安卓的时候写的项目:使用android studio完成计算器的布局并实现其简单功能
这是我用android写的第一个项目,很高兴完成的还算不错。其中最重要是里面的一下对含括号的算术表达式的计算的算法,逻辑选用复杂,我写了两天。
Android应用源码可动态调整个人所得税计算器
初学者对android布局、xml解析熟悉
Android 开发人品计算器