【问题标题】:Dynamically Add a overlay view on top of a fragment android在片段android之上动态添加覆盖视图
【发布时间】:2015-11-14 10:54:58
【问题描述】:

我有这个要求,我有一个片段实例,我想在片段顶部动态添加一个视图,而不考虑片段的根 viewGroup。

像这样的

:

  • 那么是否可以从片段的实例中获取片段的根视图?我知道我可以这样做:activity.findViewById(android.R.id.content);

  • 1234563

如果不可能,那么我是否应该在 xml 布局中的片段顶部添加一个虚拟视图,然后使用该视图添加叠加层?

【问题讨论】:

  • 你应该可以做 activity.findViewById(android.R.id.content);从片段内部,这违背了片段仅管理其自己的布局的想法,但它应该适用于 IMO。还是应该只为 Fragment 而不是 Activity 覆盖?
  • 我想要片段的 rootView 而不是活动的。
  • 好的,所以只要将Fragment布局根元素设为FrameLayout并使用它,这不解决问题吗?
  • 我不能强制 FragmentLayout 作为片段的根元素,因为我正在编写一个可供任何应用程序使用的库。
  • @PPartisan 问题是根视图不是已知布局,因此他无法向其中添加叠加层。

标签: android android-layout android-fragments


【解决方案1】:

getView() 方法返回一个包含 Fragment 根布局的 View。从那里您可以将其转换为 ViewGroup 并保留它以添加一个简单的视图,使用带有 instanceofif-else 块来确定其类型:

第一:

ViewGroup viewGroup = (ViewGroup) fragment.getView();

第二:

View view = fragment.getView();
if (view instanceof FrameLayout) {
    FrameLayout root = (FrameLayout) view;
} else if (view instanceof RelativeLayout) {

}

//etc...

第三:

编辑:删除了这个选项。它实际上是行不通的。

【讨论】:

  • 如果父视图是线性布局,或者任何其他直接从 ViewGroup 扩展的布局,这将失败。
  • 只需添加另一个分支,else if (view instanceof LinearLayout) 等。最好的选择可能是将getView() 转换为ViewGroup 思考并使用它。这应该提供足够的功能来创建基本布局。
【解决方案2】:

您可以使用 Child Fragment,但如果您只对 Fragments 根视图感兴趣,只需保留您在 Fragments onCreateView() 方法中返回的视图

【讨论】:

  • 您能否详细说明如何使用 childFragment ?实际上,我正在编写一个库,它应该能够在给定片段实例的情况下添加覆盖。我不想强制应用程序传入 rootView。另外,由于片段可以膨胀任何类型的视图组,有没有办法在片段顶部添加叠加层?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多