Android开发实践之计算器&记事助手

-

引言

这是移动应用开发入门课程的两个小项目,作为安卓开发入门是合适的。然而该老师在检查程序时居然发问“为什么要从零开始敲代码而不是找别人的成品修改”,看功能演示而不管代码实现(虽然他自己也不会Java)。我不明白一个入门课程为什么要追求功能的华丽,而对基础不管不顾。

技术领域大多数牛人靠自学成才,但不能否认的是自学中踩坑与探索的过程非常消耗时间,合适的引导能让人的效率大大提高。

计算器

文件结构

文件结构作为Android而不是Project进行解析后如图很清晰:第一个(也就是main而非android或test路径下)的/java/com.example.calc/中为后端处理逻辑的Java类。/res/layout/activity_main.xml是主要的样式文件,资源文件可以放到/drawable/values中进行引用。

UI开发

Android布局主要有:

  • RelativeLayout 相对布局(默认)
  • LinearLayout 线性布局:<LinearLayout></LinearLayout>控件垂直和水平排列,父控件layout_width="match_parent"后按权重获得控件占比()
  • FrameLayout 帧布局:按顺序重叠摆放
  • TableLayout 表格布局:界面划分为多个单元格
  • GridLayout 网格布局,4.0后引入,比表格布局更加好用
  • AbsoluteLayout 绝对布局:指定xy坐标表示位置,由于屏幕尺寸和分辨率的不同非常低效,基本淘汰。

在这里我在线性布局中嵌套了网格布局,属性看这个图就一目了然(图源菜鸟教程):

GridLayout的属性是这样的:

<GridLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#191919"
    android:columnCount="4"
    android:rowCount="5">

结合按钮“零”的属性来解释:

<Button
    android:id="@+id/btn_0"
    android:layout_width="0dp"
    android:layout_rowWeight="1"
    android:layout_columnSpan="2"
    android:layout_columnWeight="1"
    android:background="@drawable/frame"
    android:text="零"
    android:textColor="#FFFFFF"
    android:textSize="30sp" />

网格被设置成了五行(row)四列(column),button0占一行、横跨两列,layout_width设为0,背景资源从drawable中调用添加1dp边框后的版本。

后端实现

创建MainActivity继承自AppCompatActivity,并重写了OnCreate()方法,初始化生命周期:

initViews()初始化按键布局,initButtons使用HashMap建立了一个键值映射:

退格和等号的处理,这里的异常处理相当于利用了Java的异常,简洁有效:

运算逻辑处理写在DoCalc中,建立了一个伪的“元组”存储运算表达式,判断运算符or数字并进行强制类型转换,相比运算栈要简单但是只能支持双目运算:

BigBang这个类名取自 Smartisan OS 中的大爆炸功能,有些异曲同工之妙。之后就是进行拼接和计算操作,并处理除以零的异常,不再赘述。

记事助手

待开发

文章目录
  1. 1. 引言
  2. 2. 计算器
    1. 2.1. 文件结构
    2. 2.2. UI开发
    3. 2.3. 后端实现
  3. 3. 记事助手
|