0

我需要在 iPhone中创建一个类似于UITabBar的控件,该控件将出现在我的应用程序的每个活动中。UITabBar 本质上是一组按钮,表现出类似TAB的行为:每个按钮都映射到一个活动。

我有两个解决方案:

  1. 在每个活动的布局 XML 中,我插入一个<LinearLayout><Button/><Button/><Button/></LinearLayout>元素。然后有一个通用的监听器类来处理按钮的点击。所以,每个活动都会有一个这个监听器的实例。

  2. 要创建一个扩展 LinearLayout 类的自定义 Widget,请将所有按钮作为其静态成员并让它处理按钮点击。在每个屏幕中都包含此自定义控件。

我不确定要遵循哪种方法。请指教。替代品也受到赞赏

以下是我对上述方法的看法:
第一种方法的问题:

  1. 它将生成大量样板代码(findViewByIds、setOnClickListener 等)

  2. 假设有 5 个活动和 3 个选项卡按钮,则在运行时创建的 Button 对象总数将为 5 x 3 = 15

我想采用第二种方法,因为:

  1. 所有代码(状态和行为)都将被小部件类封装。更少的样板代码。

  2. 由于按钮将是静态成员,因此在运行时创建的 Button 对象的总数将只有三个。虽然,静态成员将在内存中保留更长的时间(直到 JVM 卸载该类),因为控件存在于每个屏幕上,我认为这是可以原谅的。

谢谢。

4

2 回答 2

1

为什么不直接使用 Android 中现有的 TabWidget 实现?

http://developer.android.com/guide/tutorials/views/hello-tabwidget.html

实现您自己的小部件不仅是额外的工作,而且与平台上的其他应用程序相比,它可能会让人感觉不合适。

特别是,这是我看到的一些问题:

  1. 当标签栏的外观因系统更新而改变时,您将不得不重新编写代码。您也不太可能完全匹配内置标签栏的外观。(想想 OS X 上的 Java。)

  2. 每次用户单击选项卡时,它都会将另一个活动添加到堆栈中。这不仅浪费内存,而且用户每次点击手机上的后退按钮时,都会转到上一个标签页。这不是标签栏应该工作的方式。

于 2009-12-22T08:03:20.637 回答
0

不幸的是,我找不到自定义内置 TabWidget 以使其看起来像 UITabBar 的方法。所以,我将创建一个自定义控件并将按钮作为静态成员(采用第二种方法)。控件将按预期处理点击。
我注意到获奖的 Plink Art 应用程序也有一个类似于 iPhone 的 UITabBar 的选项卡控件。

于 2009-12-25T08:05:22.537 回答