【问题标题】:Android floating view across activities跨活动的Android浮动视图
【发布时间】:2012-06-18 05:35:12
【问题描述】:

要求

我有一个带有 2 个活动的应用程序,比如 A 和 B,带有 A->BB->A 之类的导航(在后按时)。我的要求是

  • 我想要一个浮动在屏幕上的视图/布局,无论哪个 活动当前可见。我在应用程序上夸大了这个视图 start(onCreate of Activity A),它在屏幕上保持静态 从 A->B 以及 B 出现在屏幕上时的过渡。
  • 所以这个视图自然应该只膨胀一次(当应用程序启动时, A) 的 onCreate。

我发现了什么

我做了一些搜索,从我能找到的情况来看,有两种方法可以在 android 中重用布局

  • 使用 <include>

    它似乎只是一个编写常用 UI 元素的 xml 代码的工具。每次在父布局中使用时都会膨胀。

  • 使用 ViewStub

    我对使用 ViewStub 进行了一些研究,这似乎也是一种在许多布局中重用代码段的方法。每次我们在布局中使用它时也需要对其进行充气,但只有在我们使它们在运行时可见时才会充气。

我的要求的另一个提示

对于熟悉 iPhone 开发的人,您可以将视图添加到 UIWindow,无论 UIViewController 当前处于活动状态,它都会保留在那里。我想要我的应用程序中的确切行为。

我原来的设置

我的目标是 android 2.1 及更高版本。似乎Fragment 可从 API 级别 11 (android 3.0) 及更高版本获得。一种选择是使用android compatibility library,它允许在旧版本中使用Fragment。我现在正在研究这个。但我也想知道是否有任何其他方法可以满足我的要求,而不是改变我的整个项目并使用片段。

我的应用程序中有大约 30 个奇怪的活动,我希望这个布局漂浮在所有这些活动上。我刚刚制作了一个包含 2 个活动的测试用例,以使问题变得简单易行。

【问题讨论】:

  • Activity A 做了什么,Activity B 没有,Activity B 做了什么,Activity A 没有?为什么不只使用一个 Activity 和固定的 View 并调整它周围的一切?
  • 好的,我知道你在问什么。事实上,我有大约 30 多个活动,几乎不可能在单个活动中处理每个页面。为了提出这个问题,我只用 2 个活动编写了一个测试用例。抱歉,我将编辑问题以明确说明..

标签: android layout android-activity floating android-inflate


【解决方案1】:

方案一:框架布局

我认为您要使用的是FrameLayout。 FrameLayout 旨在阻止屏幕上的一个区域以显示单个项目。子视图绘制在堆栈中,最近添加的子视图位于顶部。

http://developer.android.com/reference/android/widget/FrameLayout.html

然后在此处阅读有关您可以在 Activity 中使用的后退堆栈,以便使用后退按钮在 Activity 之间来回翻转:

http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html

解决方案 2:分片交易

与其编写两个单独的 Activity,不如编写一个包含两个 Fragment 的 Activity。这是来自Fragments 文档的简介:

“一个fragment必须始终嵌入在一个activity中,fragment的生命周期直接受到宿主activity的生命周期的影响。比如activity暂停的时候,里面的所有fragment也是,当activity销毁的时候,所以都是fragment。但是,当一个activity在运行时(处于resumeed生命周期状态),你可以独立操作每个fragment,比如添加或者删除它们。当你执行这样一个fragment事务时,你也可以添加它到一个由活动管理的后台堆栈 - 活动中的每个后台堆栈条目都是发生的片段事务的记录。后台堆栈允许用户通过按下来反转片段事务(向后导航)后退按钮。”

【讨论】:

  • 关于您的解决方案 2,我不能使用片段,因为片段需要 API 级别 11(Android 3.0)并且我的目标是 API 级别 7(Android 2.1)及更高版本。我指定了有问题的
  • 关于解决方案1,我不确定我是否理解。我应该添加这个 FrameLayout 哪个活动?另请参阅我的相关编辑(在我的原始设置下)。
  • 您可以通过包含兼容性库developer.android.com/sdk/compatibility-library.html来使用Android 1.6 中的片段
  • 您可以使用兼容性库在 Android 2.1 中使用 Fragments(我一直这样做,效果很好):android-developers.blogspot.com/2011/03/fragments-for-all.html
  • 谢谢,让我看一遍。。还是太糟糕了,没有UIWindow 像android 中的设置一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多