android - android 中可重用拖放 UI 部件的代码设计

标签 android user-interface

我是 android 的新手,正在为小学的 children 编写一个学习应用程序。该应用程序用于练习简单的计算(加减法)。

到目前为止,我已经完成了 UI 设计并编写了一个简单的概念验证实现来演示应用程序的基本用法。

其中一项 Activity (123 和 456 相加)的设计如下所示:

|-----------------------------|
|  |c| 1   |c| 2   |c| 3      |
|                             |
|      4       5       6      |
|    --------------------     |
|   | r1 |  | r2 |  | r3 |    |
|                             |
|                             |
|  1  |  2  |  3  |  4  |  5  |
|  6  |  7  |  8  |  9  |  0  |
|    cancel    |     check    |
|-----------------------------|

numblock 中的数字 (0-9) 是可以拖放到进位字段 (|c|) 或结果字段 (|r1|) 的 View ETC)。已经放入进位或结果字段的值也可以移动(再次通过拖放)到另一个进位或结果字段。

将有多种练习模式,例如:

|-----------------------------|
|   1   +   9   =   |r1|r2|   |
|   2   +   8   =   |r1|r2|   |
|   3   +   7   =   |r1|r2|   |
|   4   +   6   =   |r1|r2|   |
|   5   +   5   =   |r1|r2|   |
|                             |
|                             |
|  1  |  2  |  3  |  4  |  5  |
|  6  |  7  |  8  |  9  |  0  |
|    cancel    |     check    |
|-----------------------------|

或者:

|-----------------------------|
|  1   2   3   4   5          |
|  |   |   |   |   |          |
|   |+|     |+|    |          |
|    |       |     |          |
|   |r1|    |r2|   |          |
|    |       |     |          |
|    \       \    /           |
|     \       |-|             |
|      \       |              |
|       \     |r3|            |
|        \     /              |
|         \   /               |
|          |+|                |
|           |                 |
|          |r4|               |
|                             |
|                             |
|  1  |  2  |  3  |  4  |  5  |
|  6  |  7  |  8  |  9  |  0  |
|    cancel    |     check    |
|-----------------------------|

对于我当前的实现,我在一个 Activity 中进行了所有拖放操作,布局是一个单独的 .xml 文件。

我想以某种方式重用拖放功能的代码,以保持代码整洁,并且不会在许多不同的 Activity 中实现相同的功能。

我已经阅读过 android 中的 fragment ,并考虑过为 numblock 制作一个 fragment ,为每个将放置数字的区域制作一个 fragment ,但据我研究, fragment 之间的拖放并不是真正的方法这里( drag and drop between two fragments ,提出的解决方案似乎不是很优雅)。

现在,我正在考虑根据所需模式在单个 Activity 的 onCreate() 中动态创建除 numblock 之外的所有内容。我想听听您对这种方法的看法。这样做可能会出现问题吗?

是否有另一种方法可以实现相同的功能并保持代码的可维护性? 您对我如何设计尽可能简单和可维护的代码有什么建议吗? 您将如何设计具有所需功能的应用程序?

最佳答案

将设计决策留到必须做出时的一般建议肯定适用于此。我相信有数百种方法可以像这样组织代码。

在 Activity(或可能是 Fragment)中,您目前具有以下功能:

  • 拖放数字
  • 计算答案是否正确
  • 设置问题
  • 做所有 Activity 必须做的事情 - 例如有一个 onCreate()

你能以某种方式拆分这些不同的功能吗?

是否有适合制作自己类(class)的东西?

  • 可拖动的数字?
  • 不可拖动的数字?
  • 数学符号?
  • 你拖拽的地方?
  • 构成计算的行(可以相互嵌套)?

这些元素将如何相互通信?

  • 计算答案是否正确?
  • 让元素知道它在哪里?

您将如何创建 Activity 的新实例?

  • 您将向 Activity 传递哪些数据?
  • 您想调用一组不同类型中的一种吗?
  • 如何确定 Activity 加载的类型?

我什至还没有开始回答你的问题,但这个答案已经变得很长了。

最重要的问题是你想从设计中得到什么?我猜答案是尽可能容易地向应用程序添加新类型的问题。

可能对您有帮助的事情:

  • 您可以通过编程方式将 View 添加到布局中。您不需要在 xml 文件中指定内容。当您从底部拖动时,这可以简单地用于生成新数字,或者更复杂地用于以编程方式定义整个设置。
  • 我认为接口(interface)和监听器将是元素进行通信的最佳方式。
  • 看看一些模式可能会很好:模板方法、静态工厂方法甚至策略在这里可能会有帮助。
  • 请记住,您可以轻松地将功能从 Activity 中分离到单独的 Java 文件中,然后根据需要调用它们。
  • 感觉很像游戏。我认为是否值得花时间研究游戏引擎是否可以为您提供帮助的比例是 50/50。
  • 保持简单 - 坚持一次分解一件事。一次上一门课。我不会尝试一下子做出一些庞大、复杂、错综复杂的设计。

关于android - android 中可重用拖放 UI 部件的代码设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31093601/

相关文章:

java - 无法使用 maven-android-plugin 将第 3 方 jar 包含到 Android 应用程序中

android - 提供网站以在 Android 平板电脑上离线查看的最佳方式

android - 为什么我的服务会被多次实例化?

java - Scene.getWindow() 总是一个舞台吗?

java - 设置 swing JSlider 和 JTextField 的勾选行为

android - 如何在editText android的末尾添加一个不可编辑的常量文本?

java - 在线程中访问类级别变量

wpf - 如何在 xaml 中复制 WPF 资源?

javascript - 在 Bokeh 中显示裁剪后的图像

android - 使图像适合 GridView