【问题标题】:Creating a custom control or making buttons inline创建自定义控件或内联按钮
【发布时间】:2009-12-22 05:25:44
【问题描述】:

我需要在 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 卸载该类),因为控件存在于每个屏幕上,我认为这是可以原谅的。

谢谢。

【问题讨论】:

    标签: android android-custom-view android-button


    【解决方案1】:

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

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

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

    尤其是我看到的一些问题:

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

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

    【讨论】:

    • 如我所说,我需要模拟 TabBar;不幸的是,在这里发号施令/询问任何事情都超出了我的控制范围。我不认为内置 TabWidget 的外观可以定制为看起来像 iPhone 的 TabBar。显然,人们并不关心应用程序看起来是否与其他应用程序不同。我认为您的第二点可以通过使用适当的意图标志(重新排序到前面,清除顶部等)在一定程度上得到处理;虽然我必须说这会有点复杂。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多